Added a version converter for MaterialAssignmentId. This allowed me to successfully load the Sponza level in AtomTest.

Signed-off-by: santorac <55155825+santorac@users.noreply.github.com>
This commit is contained in:
Chris Santora
2021-07-17 12:54:40 -07:00
committed by santorac
parent 14d2e38b90
commit e3ceaa477e
3 changed files with 28 additions and 2 deletions
@@ -31,6 +31,7 @@ namespace AZ
AZ_RTTI(AZ::Render::MaterialAssignmentId, "{EB603581-4654-4C17-B6DE-AE61E79EDA97}");
AZ_CLASS_ALLOCATOR(AZ::Render::MaterialAssignmentId, SystemAllocator, 0);
static void Reflect(ReflectContext* context);
static bool ConvertVersion(AZ::SerializeContext& context, AZ::SerializeContext::DataElementNode& classElement);
MaterialAssignmentId() = default;
@@ -14,12 +14,37 @@ namespace AZ
{
namespace Render
{
bool MaterialAssignmentId::ConvertVersion(AZ::SerializeContext& context, AZ::SerializeContext::DataElementNode& classElement)
{
if (classElement.GetVersion() < 2)
{
constexpr AZ::u32 materialAssetIdCrc = AZ_CRC("materialAssetId");
AZ::Data::AssetId materialAssetId;
if (!classElement.GetChildData(materialAssetIdCrc, materialAssetId))
{
AZ_Error("AZ::Render::MaterialAssignmentId::ConvertVersion", false, "Failed to get AssetId element");
return false;
}
if (!classElement.RemoveElementByName(materialAssetIdCrc))
{
AZ_Error("AZ::Render::MaterialAssignmentId::ConvertVersion", false, "Failed to remove deprecated element materialAssetId");
// No need to early-return, the object will still load successfully, it will just report more errors about the unrecognized element.
}
classElement.AddElementWithData(context, "materialSlotStableId", materialAssetId.m_subId);
}
return true;
}
void MaterialAssignmentId::Reflect(ReflectContext* context)
{
if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<MaterialAssignmentId>()
->Version(2)
->Version(2, &MaterialAssignmentId::ConvertVersion)
->Field("lodIndex", &MaterialAssignmentId::m_lodIndex)
->Field("materialSlotStableId", &MaterialAssignmentId::m_materialSlotStableId)
;
@@ -80,7 +80,7 @@ namespace AZ
if (AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<EditorMaterialComponentSlot>()
->Version(5, &EditorMaterialComponentSlot::ConvertVersion)
->Version(6, &EditorMaterialComponentSlot::ConvertVersion)
->Field("id", &EditorMaterialComponentSlot::m_id)
->Field("materialAsset", &EditorMaterialComponentSlot::m_materialAsset)
->Field("defaultMaterialAsset", &EditorMaterialComponentSlot::m_defaultMaterialAsset)