refactor: route renderer defaults through pipeline assets

This commit is contained in:
2026-04-01 00:56:48 +08:00
parent 3373119eee
commit 618ebed05d
7 changed files with 131 additions and 8 deletions

View File

@@ -14,20 +14,27 @@ class Scene;
namespace Rendering {
class RenderSurface;
class RenderPipelineAsset;
class CameraRenderer {
public:
CameraRenderer();
explicit CameraRenderer(std::unique_ptr<RenderPipeline> pipeline);
explicit CameraRenderer(std::shared_ptr<const RenderPipelineAsset> pipelineAsset);
~CameraRenderer();
void SetPipeline(std::unique_ptr<RenderPipeline> pipeline);
void SetPipelineAsset(std::shared_ptr<const RenderPipelineAsset> pipelineAsset);
RenderPipeline* GetPipeline() const { return m_pipeline.get(); }
const RenderPipelineAsset* GetPipelineAsset() const { return m_pipelineAsset.get(); }
bool Render(const CameraRenderRequest& request);
private:
void ResetPipeline(std::unique_ptr<RenderPipeline> pipeline);
RenderSceneExtractor m_sceneExtractor;
std::shared_ptr<const RenderPipelineAsset> m_pipelineAsset;
std::unique_ptr<RenderPipeline> m_pipeline;
};

View File

@@ -3,6 +3,7 @@
#include <XCEngine/Rendering/RenderMaterialUtility.h>
#include <XCEngine/Rendering/RenderPass.h>
#include <XCEngine/Rendering/RenderPipeline.h>
#include <XCEngine/Rendering/RenderPipelineAsset.h>
#include <XCEngine/Rendering/RenderResourceCache.h>
#include <XCEngine/RHI/RHIDescriptorPool.h>
@@ -100,6 +101,11 @@ private:
RenderPassSequence m_passSequence;
};
class BuiltinForwardPipelineAsset final : public RenderPipelineAsset {
public:
std::unique_ptr<RenderPipeline> CreatePipeline() const override;
};
} // namespace Pipelines
} // namespace Rendering
} // namespace XCEngine

View File

@@ -13,14 +13,19 @@ class Scene;
namespace Rendering {
class RenderPipelineAsset;
class SceneRenderer {
public:
SceneRenderer();
explicit SceneRenderer(std::unique_ptr<RenderPipeline> pipeline);
explicit SceneRenderer(std::shared_ptr<const RenderPipelineAsset> pipelineAsset);
~SceneRenderer() = default;
void SetPipeline(std::unique_ptr<RenderPipeline> pipeline);
void SetPipelineAsset(std::shared_ptr<const RenderPipelineAsset> pipelineAsset);
RenderPipeline* GetPipeline() const { return m_cameraRenderer.GetPipeline(); }
const RenderPipelineAsset* GetPipelineAsset() const { return m_cameraRenderer.GetPipelineAsset(); }
std::vector<CameraRenderRequest> BuildRenderRequests(
const Components::Scene& scene,