From 74f6d1ec742baf7cad54c64a3100564efc7c9124 Mon Sep 17 00:00:00 2001 From: santorac <55155825+santorac@users.noreply.github.com> Date: Tue, 8 Feb 2022 12:12:40 -0800 Subject: [PATCH] Cleanup up and resolving conflicts after the latest merge. Signed-off-by: santorac <55155825+santorac@users.noreply.github.com> --- .../Material/MaterialNameContext.h | 3 ++ .../Material/MaterialNameContext.cpp | 33 +++++++++++++++++++ .../Code/Source/Document/MaterialDocument.cpp | 26 +++++++++------ .../Code/Source/Document/MaterialDocument.h | 3 +- 4 files changed, 54 insertions(+), 11 deletions(-) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialNameContext.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialNameContext.h index 3ecdfeb449..124d73ad7a 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialNameContext.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialNameContext.h @@ -40,6 +40,9 @@ namespace AZ bool ContextualizeProperty(Name& propertyName) const; bool ContextualizeSrgInput(Name& srgInputName) const; bool ContextualizeShaderOption(Name& shaderOptionName) const; + bool ContextualizeProperty(AZStd::string& propertyName) const; + bool ContextualizeSrgInput(AZStd::string& srgInputName) const; + bool ContextualizeShaderOption(AZStd::string& shaderOptionName) const; //! Returns true if there is some non-default name context. bool HasContextForProperties() const { return !m_propertyIdContext.empty(); } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialNameContext.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialNameContext.cpp index bf457a0a93..5846c60e05 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialNameContext.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialNameContext.cpp @@ -84,6 +84,39 @@ namespace AZ shaderOptionName = m_shaderOptionNameContext + shaderOptionName.GetCStr(); return true; } + + bool MaterialNameContext::ContextualizeProperty(AZStd::string& propertyName) const + { + if (m_propertyIdContext.empty()) + { + return false; + } + + propertyName = m_propertyIdContext + propertyName; + return true; + } + + bool MaterialNameContext::ContextualizeSrgInput(AZStd::string& srgInputName) const + { + if (m_srgInputNameContext.empty()) + { + return false; + } + + srgInputName = m_srgInputNameContext + srgInputName; + return true; + } + + bool MaterialNameContext::ContextualizeShaderOption(AZStd::string& shaderOptionName) const + { + if (m_shaderOptionNameContext.empty()) + { + return false; + } + + shaderOptionName = m_shaderOptionNameContext + shaderOptionName; + return true; + } } // namespace RPI } // namespace AZ diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp index a66aa1dd21..648b0dd4c8 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp @@ -336,9 +336,9 @@ namespace MaterialEditor bool addPropertiesResult = true; // populate sourceData with properties that meet the filter - m_materialTypeSourceData.EnumerateProperties([&](const auto& propertyDefinition, const MaterialNameContext& nameContext) { + m_materialTypeSourceData.EnumerateProperties([&](const auto& propertyDefinition, const AZ::RPI::MaterialNameContext& nameContext) { - Name propertyId{propertyDefinition->GetName()}; + AZ::Name propertyId{propertyDefinition->GetName()}; nameContext.ContextualizeProperty(propertyId); const auto property = FindProperty(propertyId); @@ -551,16 +551,19 @@ namespace MaterialEditor // in the hierarchy are applied bool enumerateResult = m_materialTypeSourceData.EnumeratePropertyGroups( [this, &parentPropertyValues]( - const AZStd::string& propertyIdContext, const AZ::RPI::MaterialTypeSourceData::PropertyGroup* propertyGroup) + const AZ::RPI::MaterialTypeSourceData::PropertyGroup* propertyGroup, + const AZ::RPI::MaterialNameContext& groupNameContext, + const AZ::RPI::MaterialNameContext& parentNameContext) { // Add any material functors that are located inside each property group. - if (!AddEditorMaterialFunctors(propertyGroup->GetFunctors())) + if (!AddEditorMaterialFunctors(propertyGroup->GetFunctors(), groupNameContext)) { return false; } - + m_groups.emplace_back(aznew AtomToolsFramework::DynamicPropertyGroup); - m_groups.back()->m_name = propertyIdContext + propertyGroup->GetName(); + m_groups.back()->m_name = propertyGroup->GetName(); + parentNameContext.ContextualizeProperty(m_groups.back()->m_name); m_groups.back()->m_displayName = propertyGroup->GetDisplayName(); m_groups.back()->m_description = propertyGroup->GetDescription(); @@ -568,7 +571,8 @@ namespace MaterialEditor { // Assign id before conversion so it can be used in dynamic description AtomToolsFramework::DynamicPropertyConfig propertyConfig; - propertyConfig.m_id = m_groups.back()->m_name + "." + propertyDefinition->GetName(); + propertyConfig.m_id = propertyDefinition->GetName(); + groupNameContext.ContextualizeProperty(m_groups.back()->m_name); const auto& propertyIndex = m_materialAsset->GetMaterialPropertiesLayout()->FindPropertyIndex(propertyConfig.m_id); const bool propertyIndexInBounds = @@ -610,7 +614,8 @@ namespace MaterialEditor } // Add material functors that are in the top-level functors list. - if (!AddEditorMaterialFunctors(m_materialTypeSourceData.m_materialFunctorSourceData)) + AZ::RPI::MaterialNameContext materialNameContext; // There is no name context for top-level functors, only functors inside PropertyGroups + if (!AddEditorMaterialFunctors(m_materialTypeSourceData.m_materialFunctorSourceData, materialNameContext)) { return OpenFailed(); } @@ -736,10 +741,11 @@ namespace MaterialEditor } bool MaterialDocument::AddEditorMaterialFunctors( - const AZStd::vector>& functorSourceDataHolders) + const AZStd::vector>& functorSourceDataHolders, + const AZ::RPI::MaterialNameContext& nameContext) { const AZ::RPI::MaterialFunctorSourceData::EditorContext editorContext = AZ::RPI::MaterialFunctorSourceData::EditorContext( - m_materialSourceData.m_materialType, m_materialAsset->GetMaterialPropertiesLayout()); + m_materialSourceData.m_materialType, m_materialAsset->GetMaterialPropertiesLayout(), &nameContext); for (AZ::RPI::Ptr functorData : functorSourceDataHolders) { diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.h b/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.h index 37b3e1922f..42385cfb25 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.h @@ -82,7 +82,8 @@ namespace MaterialEditor void RestorePropertyValues(const PropertyValueMap& propertyValues); bool AddEditorMaterialFunctors( - const AZStd::vector>& functorSourceDataHolders); + const AZStd::vector>& functorSourceDataHolders, + const AZ::RPI::MaterialNameContext& nameContext); // Run editor material functor to update editor metadata. // @param dirtyFlags indicates which properties have changed, and thus which MaterialFunctors need to be run.