refactor(rendering): retain managed pipeline asset runtime per native asset

This commit is contained in:
2026-04-17 23:54:04 +08:00
parent 6838b00d97
commit fa9a5ffb00
6 changed files with 395 additions and 214 deletions

View File

@@ -25,6 +25,22 @@ ManagedScriptableRenderPipelineAsset::ManagedScriptableRenderPipelineAsset(
: m_descriptor(std::move(descriptor)) {
}
std::shared_ptr<const ManagedRenderPipelineAssetRuntime>
ManagedScriptableRenderPipelineAsset::ResolveManagedAssetRuntime() const {
if (m_managedAssetRuntime != nullptr) {
return m_managedAssetRuntime;
}
const std::shared_ptr<const ManagedRenderPipelineBridge> bridge =
GetManagedRenderPipelineBridgeStorage();
if (bridge == nullptr) {
return nullptr;
}
m_managedAssetRuntime = bridge->CreateAssetRuntime(m_descriptor);
return m_managedAssetRuntime;
}
std::unique_ptr<RenderPipeline> ManagedScriptableRenderPipelineAsset::CreatePipeline() const {
std::unique_ptr<RenderPipeline> pipeline = m_fallbackAsset.CreatePipeline();
auto* host = dynamic_cast<ScriptableRenderPipelineHost*>(pipeline.get());
@@ -32,11 +48,10 @@ std::unique_ptr<RenderPipeline> ManagedScriptableRenderPipelineAsset::CreatePipe
return pipeline;
}
const std::shared_ptr<const ManagedRenderPipelineBridge> bridge =
GetManagedRenderPipelineBridgeStorage();
if (bridge != nullptr) {
host->SetStageRecorder(
bridge->CreateStageRecorder(m_descriptor));
if (const std::shared_ptr<const ManagedRenderPipelineAssetRuntime> runtime =
ResolveManagedAssetRuntime();
runtime != nullptr) {
host->SetStageRecorder(runtime->CreateStageRecorder());
}
return pipeline;
@@ -50,10 +65,10 @@ void ManagedScriptableRenderPipelineAsset::ConfigureCameraFramePlan(
CameraFramePlan& plan) const {
RenderPipelineAsset::ConfigureCameraFramePlan(plan);
const std::shared_ptr<const ManagedRenderPipelineBridge> bridge =
GetManagedRenderPipelineBridgeStorage();
if (bridge != nullptr) {
bridge->ConfigureCameraFramePlan(m_descriptor, plan);
if (const std::shared_ptr<const ManagedRenderPipelineAssetRuntime> runtime =
ResolveManagedAssetRuntime();
runtime != nullptr) {
runtime->ConfigureCameraFramePlan(plan);
}
}