Moved the material slot list from ModelLodAsset to ModelAsset, so all the slots live in one main list. This removes data duplication between LODs and cleans up the code a bit.
I had to update the ModelLod class to take in both the ModelLodAsset and ModelAsset for initialization so it can fetch the slots for each mesh. Signed-off-by: santorac <55155825+santorac@users.noreply.github.com>
This commit is contained in:
@@ -19,11 +19,14 @@ namespace AZ
|
||||
{
|
||||
namespace RPI
|
||||
{
|
||||
Data::Instance<ModelLod> ModelLod::FindOrCreate(const Data::Asset<ModelLodAsset>& lodAsset)
|
||||
Data::Instance<ModelLod> ModelLod::FindOrCreate(const Data::Asset<ModelLodAsset>& lodAsset, const Data::Asset<ModelAsset>& modelAsset)
|
||||
{
|
||||
AZStd::any modelAssetAny{&modelAsset};
|
||||
|
||||
return Data::InstanceDatabase<ModelLod>::Instance().FindOrCreate(
|
||||
Data::InstanceId::CreateFromAssetId(lodAsset.GetId()),
|
||||
lodAsset);
|
||||
lodAsset,
|
||||
&modelAssetAny);
|
||||
}
|
||||
|
||||
AZStd::array_view<ModelLod::Mesh> ModelLod::GetMeshes() const
|
||||
@@ -31,10 +34,13 @@ namespace AZ
|
||||
return m_meshes;
|
||||
}
|
||||
|
||||
Data::Instance<ModelLod> ModelLod::CreateInternal(ModelLodAsset& lodAsset)
|
||||
Data::Instance<ModelLod> ModelLod::CreateInternal(const Data::Asset<ModelLodAsset>& lodAsset, const AZStd::any* modelAssetAny)
|
||||
{
|
||||
AZ_Assert(modelAssetAny != nullptr, "Invalid model asset param");
|
||||
auto modelAsset = AZStd::any_cast<Data::Asset<ModelAsset>*>(*modelAssetAny);
|
||||
|
||||
Data::Instance<ModelLod> lod = aznew ModelLod();
|
||||
const RHI::ResultCode resultCode = lod->Init(lodAsset);
|
||||
const RHI::ResultCode resultCode = lod->Init(lodAsset, *modelAsset);
|
||||
|
||||
if (resultCode == RHI::ResultCode::Success)
|
||||
{
|
||||
@@ -44,11 +50,11 @@ namespace AZ
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RHI::ResultCode ModelLod::Init(ModelLodAsset& lodAsset)
|
||||
RHI::ResultCode ModelLod::Init(const Data::Asset<ModelLodAsset>& lodAsset, const Data::Asset<ModelAsset>& modelAsset)
|
||||
{
|
||||
AZ_TRACE_METHOD();
|
||||
|
||||
for (const ModelLodAsset::Mesh& mesh : lodAsset.GetMeshes())
|
||||
for (const ModelLodAsset::Mesh& mesh : lodAsset->GetMeshes())
|
||||
{
|
||||
Mesh meshInstance;
|
||||
|
||||
@@ -100,7 +106,7 @@ namespace AZ
|
||||
}
|
||||
}
|
||||
|
||||
const ModelMaterialSlot& materialSlot = lodAsset.GetMaterialSlot(mesh.GetMaterialSlotIndex());
|
||||
const ModelMaterialSlot& materialSlot = modelAsset->FindMaterialSlot(mesh.GetMaterialSlotId());
|
||||
|
||||
meshInstance.m_materialSlotStableId = materialSlot.m_stableId;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user