refactor(rendering): add srp host stage recorder bridge

This commit is contained in:
2026-04-15 20:07:52 +08:00
parent 22a2b982ef
commit cafe3c8076
6 changed files with 283 additions and 5 deletions

View File

@@ -42,6 +42,22 @@ private:
ScriptableRenderPipelineHostAsset m_fallbackAsset;
};
class ManagedRenderPipelineBridge {
public:
virtual ~ManagedRenderPipelineBridge() = default;
virtual std::unique_ptr<RenderPipelineStageRecorder> CreateStageRecorder(
const ManagedRenderPipelineAssetDescriptor&) const {
return nullptr;
}
};
void SetManagedRenderPipelineBridge(
std::shared_ptr<const ManagedRenderPipelineBridge> bridge);
void ClearManagedRenderPipelineBridge();
std::shared_ptr<const ManagedRenderPipelineBridge>
GetManagedRenderPipelineBridge();
void SetManagedRenderPipelineAssetDescriptor(
const ManagedRenderPipelineAssetDescriptor& descriptor);
void ClearManagedRenderPipelineAssetDescriptor();

View File

@@ -20,9 +20,13 @@ public:
using RenderPipeline::Render;
void SetStageRecorder(std::unique_ptr<RenderPipelineStageRecorder> stageRecorder);
void SetPipelineRenderer(std::unique_ptr<RenderPipelineRenderer> pipelineRenderer);
void SetPipelineRendererAsset(
std::shared_ptr<const RenderPipelineAsset> pipelineRendererAsset);
RenderPipelineStageRecorder* GetStageRecorder() const {
return m_stageRecorder.get();
}
RenderPipelineRenderer* GetPipelineRenderer() const {
return m_pipelineRenderer.get();
}
@@ -42,8 +46,10 @@ public:
const RenderSceneData& sceneData) override;
private:
void ResetStageRecorder(std::unique_ptr<RenderPipelineStageRecorder> stageRecorder);
void ResetPipelineRenderer(std::unique_ptr<RenderPipelineRenderer> pipelineRenderer);
std::unique_ptr<RenderPipelineStageRecorder> m_stageRecorder;
std::shared_ptr<const RenderPipelineAsset> m_pipelineRendererAsset;
std::unique_ptr<RenderPipelineRenderer> m_pipelineRenderer;
};

View File

@@ -36,6 +36,23 @@ struct RenderPipelineStageRenderGraphContext {
RenderGraphBlackboard* blackboard = nullptr;
};
class RenderPipelineStageRecorder {
public:
virtual ~RenderPipelineStageRecorder() = default;
virtual bool Initialize(const RenderContext&) {
return true;
}
virtual void Shutdown() {}
virtual bool SupportsStageRenderGraph(CameraFrameStage) const {
return false;
}
virtual bool RecordStageRenderGraph(
const RenderPipelineStageRenderGraphContext&) {
return false;
}
};
class RenderPipelineRenderer {
public:
virtual ~RenderPipelineRenderer() = default;