Files
o3de/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelSystem.cpp
T
Chris Santora fec79a7d53 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>
2021-07-30 11:41:02 -07:00

66 lines
2.4 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#include <Atom/RPI.Public/Model/ModelSystem.h>
#include <Atom/RPI.Public/Model/Model.h>
#include <Atom/RPI.Public/Model/ModelLod.h>
#include <Atom/RPI.Reflect/Model/MorphTargetMetaAsset.h>
#include <Atom/RPI.Reflect/Model/SkinMetaAsset.h>
#include <AtomCore/Instance/InstanceDatabase.h>
namespace AZ
{
namespace RPI
{
void ModelSystem::Reflect(AZ::ReflectContext* context)
{
ModelLodAsset::Reflect(context);
ModelAsset::Reflect(context);
ModelMaterialSlot::Reflect(context);
MorphTargetMetaAsset::Reflect(context);
SkinMetaAsset::Reflect(context);
}
void ModelSystem::GetAssetHandlers(AssetHandlerPtrList& assetHandlers)
{
assetHandlers.emplace_back(MakeAssetHandler<ModelLodAssetHandler>());
assetHandlers.emplace_back(MakeAssetHandler<ModelAssetHandler>());
assetHandlers.emplace_back(MakeAssetHandler<MorphTargetMetaAssetHandler>());
assetHandlers.emplace_back(MakeAssetHandler<SkinMetaAssetHandler>());
}
void ModelSystem::Init()
{
//Create Lod Database
AZ::Data::InstanceHandler<ModelLod> lodInstanceHandler;
lodInstanceHandler.m_createFunctionWithParam = [](Data::AssetData* modelLodAsset, const AZStd::any* modelAsset)
{
return ModelLod::CreateInternal(Data::Asset<ModelLodAsset>{modelLodAsset, AZ::Data::AssetLoadBehavior::PreLoad}, modelAsset);
};
Data::InstanceDatabase<ModelLod>::Create(azrtti_typeid<ModelLodAsset>(), lodInstanceHandler);
//Create Model Database
AZ::Data::InstanceHandler<Model> modelInstanceHandler;
modelInstanceHandler.m_createFunction = [](Data::AssetData* modelAsset)
{
return Model::CreateInternal(Data::Asset<ModelAsset>{modelAsset, AZ::Data::AssetLoadBehavior::PreLoad});
};
Data::InstanceDatabase<Model>::Create(azrtti_typeid<ModelAsset>(), modelInstanceHandler);
}
void ModelSystem::Shutdown()
{
Data::InstanceDatabase<Model>::Destroy();
Data::InstanceDatabase<ModelLod>::Destroy();
}
} // namespace RPI
} // namespace AZ