Model Hot-Reloading (#4304)
* Added a ModelReloader class that handles reloading the hierarchy of assets in the correct order. A ModelReloaderSystem that is used to make sure there is only one ModelReloader at a time for a given asset. Modified the Model, ModelLodAsset, and Buffer assets to not automatically reload, and instead handle reloads manually via AssetCatalog events. Modified the MeshLoader to kick off a reload via the ModelReloaderSystem whenever a model asset is added or changed. Signed-off-by: amzn-tommy <waltont@amazon.com> * Comment updates Signed-off-by: amzn-tommy <waltont@amazon.com> * Minor naming and comment updates based on PR feedback Signed-off-by: amzn-tommy <waltont@amazon.com> * Correcting previous commit. I flipped == to != when switching from count to find, when it should have stayed == Signed-off-by: amzn-tommy <waltont@amazon.com> * Updating RenderCommon header Signed-off-by: amzn-tommy <waltont@amazon.com> * Removing unneeded headers Signed-off-by: amzn-tommy <waltont@amazon.com> * Reverting RayTracingFeatureProcessor change following Doug's guidance. This logic was tricky to get right initially, and leads to TDR when incorrect, so leaving as is. Signed-off-by: amzn-tommy <waltont@amazon.com> * Removing a tab Signed-off-by: amzn-tommy <waltont@amazon.com> * Added missing #include for AssetId Signed-off-by: amzn-tommy <waltont@amazon.com> * Adding missing RTTI header Signed-off-by: amzn-tommy <waltont@amazon.com> * Include ModelAsset definition intead of forward declaring it to avoid a static assert on Linux Signed-off-by: amzn-tommy <waltont@amazon.com>
This commit is contained in:
@@ -31,6 +31,28 @@ namespace AZ
|
||||
modelAsset);
|
||||
}
|
||||
|
||||
|
||||
void Model::TEMPOrphanFromDatabase(const Data::Asset<ModelAsset>& modelAsset)
|
||||
{
|
||||
for (auto& modelLodAsset : modelAsset->GetLodAssets())
|
||||
{
|
||||
for(auto& mesh : modelLodAsset->GetMeshes())
|
||||
{
|
||||
for (auto& streamBufferInfo : mesh.GetStreamBufferInfoList())
|
||||
{
|
||||
Data::InstanceDatabase<Buffer>::Instance().TEMPOrphan(
|
||||
Data::InstanceId::CreateFromAssetId(streamBufferInfo.m_bufferAssetView.GetBufferAsset().GetId()));
|
||||
}
|
||||
Data::InstanceDatabase<Buffer>::Instance().TEMPOrphan(
|
||||
Data::InstanceId::CreateFromAssetId(mesh.GetIndexBufferAssetView().GetBufferAsset().GetId()));
|
||||
}
|
||||
Data::InstanceDatabase<ModelLod>::Instance().TEMPOrphan(Data::InstanceId::CreateFromAssetId(modelLodAsset.GetId()));
|
||||
}
|
||||
|
||||
Data::InstanceDatabase<Model>::Instance().TEMPOrphan(
|
||||
Data::InstanceId::CreateFromAssetId(modelAsset.GetId()));
|
||||
}
|
||||
|
||||
size_t Model::GetLodCount() const
|
||||
{
|
||||
return m_lods.size();
|
||||
|
||||
Reference in New Issue
Block a user