fix(rendering): rebind managed srp asset runtime after bridge reset

This commit is contained in:
2026-04-18 01:01:30 +08:00
parent afb2c1579c
commit e388b6fbe3
3 changed files with 57 additions and 1 deletions

View File

@@ -18,6 +18,11 @@ std::shared_ptr<const ManagedRenderPipelineBridge>& GetManagedRenderPipelineBrid
return s_bridge;
}
size_t& GetManagedRenderPipelineBridgeGenerationStorage() {
static size_t s_generation = 1u;
return s_generation;
}
} // namespace
ManagedScriptableRenderPipelineAsset::ManagedScriptableRenderPipelineAsset(
@@ -27,10 +32,16 @@ ManagedScriptableRenderPipelineAsset::ManagedScriptableRenderPipelineAsset(
std::shared_ptr<const ManagedRenderPipelineAssetRuntime>
ManagedScriptableRenderPipelineAsset::ResolveManagedAssetRuntime() const {
if (m_managedAssetRuntime != nullptr) {
const size_t bridgeGeneration =
GetManagedRenderPipelineBridgeGenerationStorage();
if (m_managedAssetRuntime != nullptr &&
m_managedAssetRuntimeBridgeGeneration == bridgeGeneration) {
return m_managedAssetRuntime;
}
m_managedAssetRuntime.reset();
m_managedAssetRuntimeBridgeGeneration = bridgeGeneration;
const std::shared_ptr<const ManagedRenderPipelineBridge> bridge =
GetManagedRenderPipelineBridgeStorage();
if (bridge == nullptr) {
@@ -97,10 +108,12 @@ void ManagedScriptableRenderPipelineAsset::ConfigureCameraFramePlan(
void SetManagedRenderPipelineBridge(
std::shared_ptr<const ManagedRenderPipelineBridge> bridge) {
GetManagedRenderPipelineBridgeStorage() = std::move(bridge);
++GetManagedRenderPipelineBridgeGenerationStorage();
}
void ClearManagedRenderPipelineBridge() {
GetManagedRenderPipelineBridgeStorage().reset();
++GetManagedRenderPipelineBridgeGenerationStorage();
}
std::shared_ptr<const ManagedRenderPipelineBridge>