Adding some code to cache the material in the editor component to avoid flickering

Signed-off-by: mrieggeramzn <mriegger@amazon.com>
monroegm-disable-blank-issue-2
mrieggeramzn 4 years ago
parent 0f4a9d70b5
commit a1f22f6823

@ -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

Loading…
Cancel
Save