fix(rendering): refresh managed pipelines on srp environment changes

This commit is contained in:
2026-04-18 01:10:45 +08:00
parent e388b6fbe3
commit df02a4e741
5 changed files with 140 additions and 3 deletions

View File

@@ -4,6 +4,7 @@
#include <XCEngine/Rendering/Extraction/RenderSceneExtractor.h>
#include <XCEngine/Rendering/RenderPipeline.h>
#include <cstddef>
#include <memory>
namespace XCEngine {
@@ -33,12 +34,14 @@ public:
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(); }
RenderPipeline* GetPipeline() const;
const RenderPipelineAsset* GetPipelineAsset() const;
bool Render(const CameraFramePlan& plan);
private:
bool UsesManagedPipelineBinding() const;
void RefreshManagedPipelineBindingIfNeeded();
void ResetPipeline(std::unique_ptr<RenderPipeline> pipeline);
bool BuildSceneDataForPlan(
const CameraFramePlan& plan,
@@ -53,6 +56,8 @@ private:
std::shared_ptr<const RenderPipelineAsset> m_pipelineAsset;
std::unique_ptr<RenderPipeline> m_pipeline;
std::unique_ptr<DirectionalShadowRuntime> m_directionalShadowRuntime;
bool m_usesDefaultPipelineAssetSelection = false;
size_t m_managedPipelineEnvironmentGeneration = 0u;
};
} // namespace Rendering

View File

@@ -96,6 +96,7 @@ void SetManagedRenderPipelineBridge(
void ClearManagedRenderPipelineBridge();
std::shared_ptr<const ManagedRenderPipelineBridge>
GetManagedRenderPipelineBridge();
size_t GetManagedRenderPipelineEnvironmentGeneration();
void SetManagedRenderPipelineAssetDescriptor(
const ManagedRenderPipelineAssetDescriptor& descriptor);