Changed the .material file format to use a flat list for material property values, instead of a tree structure.
This is needed to support deeply nested material property groups, it just makes the serialization code a lot simpler than trying to support nested groups in the .material file. It also makes the file more readable and easier to search all files for particular properties. I also updated MaterialSourceData to hide the property values behind a clean API. Signed-off-by: santorac <55155825+santorac@users.noreply.github.com>
This commit is contained in:
@@ -362,8 +362,8 @@ namespace MaterialEditor
|
||||
}
|
||||
|
||||
// TODO: Support populating the Material Editor with nested property groups, not just the top level.
|
||||
const AZStd::string groupName = propertyId.GetStringView().substr(0, propertyId.GetStringView().size() - propertyDefinition->GetName().size() - 1);
|
||||
sourceData.m_properties[groupName][propertyDefinition->GetName()] = propertyValue;
|
||||
AZStd::string_view groupName = propertyId.GetStringView().substr(0, propertyId.GetStringView().size() - propertyDefinition->GetName().size() - 1);
|
||||
sourceData.SetPropertyValue(AZ::RPI::MaterialPropertyId{groupName, propertyDefinition->GetName()}, propertyValue);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@@ -395,12 +395,15 @@ namespace MaterialEditor
|
||||
if (AzFramework::StringFunc::Path::IsExtension(m_absolutePath.c_str(), AZ::RPI::MaterialSourceData::Extension))
|
||||
{
|
||||
// Load the material source data so that we can check properties and create a material asset from it
|
||||
if (!AZ::RPI::JsonUtils::LoadObjectFromFile(m_absolutePath, m_materialSourceData))
|
||||
auto loadResult = AZ::RPI::MaterialUtils::LoadMaterialSourceData(m_absolutePath);
|
||||
if (!loadResult)
|
||||
{
|
||||
AZ_Error("MaterialDocument", false, "Material source data could not be loaded: '%s'.", m_absolutePath.c_str());
|
||||
return OpenFailed();
|
||||
}
|
||||
|
||||
m_materialSourceData = loadResult.TakeValue();
|
||||
|
||||
// We always need the absolute path for the material type and parent material to load source data and resolving
|
||||
// relative paths when saving. This will convert and store them as absolute paths for use within the document.
|
||||
if (!m_materialSourceData.m_parentMaterial.empty())
|
||||
@@ -482,12 +485,15 @@ namespace MaterialEditor
|
||||
if (!m_materialSourceData.m_parentMaterial.empty())
|
||||
{
|
||||
AZ::RPI::MaterialSourceData parentMaterialSourceData;
|
||||
if (!AZ::RPI::JsonUtils::LoadObjectFromFile(m_materialSourceData.m_parentMaterial, parentMaterialSourceData))
|
||||
auto loadResult = AZ::RPI::MaterialUtils::LoadMaterialSourceData(m_materialSourceData.m_parentMaterial);
|
||||
if (!loadResult)
|
||||
{
|
||||
AZ_Error("MaterialDocument", false, "Material parent source data could not be loaded for: '%s'.", m_materialSourceData.m_parentMaterial.c_str());
|
||||
return OpenFailed();
|
||||
}
|
||||
|
||||
parentMaterialSourceData = loadResult.TakeValue();
|
||||
|
||||
const auto parentMaterialAssetIdResult = AZ::RPI::AssetUtils::MakeAssetId(m_materialSourceData.m_parentMaterial, 0);
|
||||
if (!parentMaterialAssetIdResult)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user