Merge pull request #860 from aws-lumberyard-dev/Atom/santorac/MaterialInspectorCrash-ATOM-15597
ATOM-15597 Accessing Material Instance Panel Crashes Editor
There were two issues fixed here. First, I broke the material inspector with my changes at 53188a1 which added support for hiding entire property groups. I'm not sure how this happened because I definitely tested the MaterialComponent's material inspector. Perhaps there was a bad merge or something otherwise got clobbered after testing and before committing. Anyway, this issue was I accidentally delete the code that prepared the list of material properties for functor processing.
The second issue was the MaterialFunctor class needs to return null when metadata can't be found; it was proceeding to dereference an end iterator.
Testing:
Successfully opened the material inspector through the MaterialComponent. Was able to change property flags in the inspector and see other properties change visibility as expected.
This commit is contained in:
@@ -334,6 +334,7 @@ namespace AZ
|
||||
if (it == m_propertyMetadata.end())
|
||||
{
|
||||
AZ_Error("MaterialFunctor", false, "Couldn't find metadata for material property: %s.", propertyName.GetCStr());
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return &it->second;
|
||||
@@ -345,6 +346,7 @@ namespace AZ
|
||||
if (it == m_propertyGroupMetadata.end())
|
||||
{
|
||||
AZ_Error("MaterialFunctor", false, "Couldn't find metadata for material property group: %s.", propertyGroupName.GetCStr());
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return &it->second;
|
||||
|
||||
+5
@@ -304,6 +304,11 @@ namespace AZ
|
||||
for (auto& groupPair : m_groups)
|
||||
{
|
||||
AZ::RPI::MaterialPropertyGroupDynamicMetadata& metadata = propertyGroupDynamicMetadata[AZ::Name{groupPair.first}];
|
||||
|
||||
for (auto& property : groupPair.second.m_properties)
|
||||
{
|
||||
AtomToolsFramework::ConvertToPropertyMetaData(propertyDynamicMetadata[property.GetId()], property.GetConfig());
|
||||
}
|
||||
|
||||
// It's significant that we check IsGroupHidden rather than IsGroupVisisble, because it follows the same rules as QWidget::isHidden().
|
||||
// We don't care whether the widget and all its parents are visible, we only care about whether the group was hidden within the context
|
||||
|
||||
Reference in New Issue
Block a user