From 672c82f69dc0fd8002ebb33bb928cfe6fdf6b772 Mon Sep 17 00:00:00 2001 From: Tommy Walton Date: Tue, 2 Nov 2021 16:40:56 -0700 Subject: [PATCH] Add a default fallback image when a StreamingImageAsset fails to load Signed-off-by: Tommy Walton --- .../Image/StreamingImageAssetHandler.h | 2 ++ .../Image/StreamingImageAssetHandler.cpp | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAssetHandler.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAssetHandler.h index 3f4e15744a..f69463ae60 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAssetHandler.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAssetHandler.h @@ -25,6 +25,8 @@ namespace AZ const Data::Asset& asset, AZStd::shared_ptr stream, const Data::AssetFilterCB& assetLoadFilterCB) override; + + Data::AssetId AssetMissingInCatalog(const Data::Asset& /*asset*/) override; }; } } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAssetHandler.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAssetHandler.cpp index fa39820329..e73d8e1c03 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAssetHandler.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAssetHandler.cpp @@ -7,6 +7,7 @@ */ #include +#include namespace AZ { @@ -40,5 +41,34 @@ namespace AZ return loadResult; } + + Data::AssetId StreamingImageAssetHandler::AssetMissingInCatalog(const Data::Asset& asset) + { + // Escalate the asset to the top of the list + AzFramework::AssetSystemRequestBus::Broadcast( + &AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetByUuid, asset.GetId().m_guid); + + // Make sure the default fallback image has been processed so that it is part of the asset catalog + AzFramework::AssetSystem::AssetStatus status = AzFramework::AssetSystem::AssetStatus_Unknown; + AzFramework::AssetSystemRequestBus::BroadcastResult( + status, &AzFramework::AssetSystemRequestBus::Events::CompileAssetSync, "textures/defaults/defaultnouvs.tif.streamingimage"); + + // Get the id of the fallback image + Data::AssetInfo assetInfo; + assetInfo.m_relativePath = "textures/defaults/defaultnouvs.tif.streamingimage"; + Data::AssetId assetId; + Data::AssetCatalogRequestBus::BroadcastResult( + assetId, &Data::AssetCatalogRequestBus::Events::GenerateAssetIdTEMP, + assetInfo.m_relativePath.c_str()); + + assetInfo.m_assetId = Data::AssetId(assetId.m_guid, StreamingImageAsset::GetImageAssetSubId()); + + // Register the fallback image with the asset catalog + Data::AssetCatalogRequestBus::Broadcast( + &Data::AssetCatalogRequestBus::Events::RegisterAsset, assetInfo.m_assetId, assetInfo); + + // Use a default Image as a fallback + return assetInfo.m_assetId; + } } }