Adding some code to cache the material in the editor component to avoid flickering
Signed-off-by: mrieggeramzn <mriegger@amazon.com>
This commit is contained in:
@@ -15,6 +15,11 @@ namespace AZ
|
||||
{
|
||||
namespace Render
|
||||
{
|
||||
static AZ::Data::Asset<AZ::RPI::MaterialAsset> QueueLoad(const AZ::Data::AssetId id)
|
||||
{
|
||||
return AZ::Data::AssetManager::Instance().GetAsset<AZ::RPI::MaterialAsset>(id, AZ::Data::AssetLoadBehavior::QueueLoad);
|
||||
}
|
||||
|
||||
EditorDecalComponent::EditorDecalComponent(const DecalComponentConfig& config)
|
||||
: BaseClass(config)
|
||||
{
|
||||
@@ -87,16 +92,26 @@ namespace AZ
|
||||
AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(GetEntityId());
|
||||
AzToolsFramework::EditorComponentSelectionRequestsBus::Handler::BusConnect(GetEntityId());
|
||||
AzFramework::BoundsRequestBus::Handler::BusConnect(GetEntityId());
|
||||
CacheMaterial();
|
||||
}
|
||||
|
||||
void EditorDecalComponent::Deactivate()
|
||||
{
|
||||
m_cachedMaterial = {};
|
||||
AzFramework::BoundsRequestBus::Handler::BusDisconnect();
|
||||
AzToolsFramework::EditorComponentSelectionRequestsBus::Handler::BusDisconnect();
|
||||
AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect();
|
||||
BaseClass::Deactivate();
|
||||
}
|
||||
|
||||
void EditorDecalComponent::CacheMaterial()
|
||||
{
|
||||
DecalComponentConfig decalComponentConfig;
|
||||
GetConfiguration(decalComponentConfig);
|
||||
const auto& materialAsset = decalComponentConfig.m_materialAsset;
|
||||
m_cachedMaterial = QueueLoad(materialAsset.GetId());
|
||||
}
|
||||
|
||||
AZ::Transform EditorDecalComponent::GetWorldTransform() const
|
||||
{
|
||||
AZ::Transform transform = AZ::Transform::CreateIdentity();
|
||||
@@ -193,6 +208,7 @@ namespace AZ
|
||||
u32 EditorDecalComponent::OnConfigurationChanged()
|
||||
{
|
||||
BaseClass::OnConfigurationChanged();
|
||||
CacheMaterial();
|
||||
return Edit::PropertyRefreshLevels::AttributesAndValues;
|
||||
}
|
||||
|
||||
|
||||
@@ -64,6 +64,12 @@ namespace AZ
|
||||
|
||||
//! EditorRenderComponentAdapter overrides ...
|
||||
u32 OnConfigurationChanged() override;
|
||||
|
||||
// Hold onto the material for the lifespan of the EditorDecalComponent to smooth out performance. This is so we can avoid
|
||||
// duplicate loads as the DecalTextureArrayFeatureProcessor will unload the materials after texture packing.
|
||||
void CacheMaterial();
|
||||
|
||||
AZ::Data::Asset<Data::AssetData> m_cachedMaterial;
|
||||
};
|
||||
} // namespace Render
|
||||
} // namespace AZ
|
||||
|
||||
Reference in New Issue
Block a user