diff --git a/libs/materials/ParseLib.h b/libs/materials/ParseLib.h index 840acf701a..7ac88edaa2 100644 --- a/libs/materials/ParseLib.h +++ b/libs/materials/ParseLib.h @@ -142,6 +142,19 @@ inline std::string getStringForSortRequestValue(float value) return std::string(); } +inline float getSortRequestValueForString(const std::string& value) +{ + for (const auto& pair : PredefinedSortValues) + { + if (value == pair.first) + { + return static_cast(pair.second); + } + } + + return string::convert(value, Material::SORT_OPAQUE); +} + constexpr std::pair MapTypeNames[] { { "map", IShaderLayer::MapType::Map }, diff --git a/radiant/ui/materials/editor/MaterialEditor.cpp b/radiant/ui/materials/editor/MaterialEditor.cpp index 74adbfe0fc..6e6920bb87 100644 --- a/radiant/ui/materials/editor/MaterialEditor.cpp +++ b/radiant/ui/materials/editor/MaterialEditor.cpp @@ -307,7 +307,10 @@ void MaterialEditor::setupMaterialProperties() } else { - material->setSortRequest(Material::SORT_OPAQUE); + auto sortValue = getControl("MaterialSortValue")->GetValue().ToStdString(); + material->setSortRequest(!sortValue.empty() ? + shaders::getSortRequestValueForString(sortValue) : + static_cast(Material::SORT_OPAQUE)); } }, [this]() { onMaterialChanged(); })); @@ -2056,7 +2059,9 @@ void MaterialEditor::_onSortRequestChanged(wxCommandEvent& ev) if (!_material || _materialUpdateInProgress) return; auto sortDropdown = getControl("MaterialSortValue"); - _material->setSortRequest(string::convert(sortDropdown->GetValue().ToStdString(), Material::SORT_OPAQUE)); + auto value = sortDropdown->GetValue().ToStdString(); + _material->setSortRequest(shaders::getSortRequestValueForString(value)); + onMaterialChanged(); }