diff --git a/engine/include/XCEngine/Rendering/AGENTS.md b/engine/include/XCEngine/Rendering/AGENTS.md index e3c87296..8be3f83b 100644 --- a/engine/include/XCEngine/Rendering/AGENTS.md +++ b/engine/include/XCEngine/Rendering/AGENTS.md @@ -243,8 +243,9 @@ package。 - `ScriptableRendererData` 的 runtime state version 不只来自 feature collection。`UniversalRendererData` 已把 `mainScene`、`shadowCaster` 和 `depthPrepass` block settings 纳入 hash;这些 settings 改变时必须 触发 renderer cache 释放和 pass queue/stage manifest 重建。 -- `ScriptableRenderer` 按 stage 构建 `m_activePassQueue`。它依次调用 feature `SetupRenderPasses`、feature - `AddRenderPasses`,再调用 renderer-owned `AddRenderPasses`;passes 按 `RenderPassEvent` 顺序插入,并归组到 +- `ScriptableRenderer` 按 per-camera pass queue 构建 `m_activePassQueue`。它依次调用 feature + `SetupRenderPasses`、feature `AddRenderPasses`,再调用 renderer-owned `AddRenderPasses`;这些声明入口接收 + `RendererPassQueueData`,不暴露 `RenderingData.stage`;passes 按 `RenderPassEvent` 顺序插入,并归组到 `RendererBlocks`。 - URP stage planning 以 `ScriptableRenderer` 的 active pass queue 为最终事实源。`ConfigureCameraFramePlan` 仍是兼容和高级策略 hook,但它不能单独声明 shadow、depth、post 或 final-output stage;没有被 pass queue @@ -263,7 +264,8 @@ package。 pass 状态的边界;新增 mutable pass state 时必须确认它能被 frame-plan snapshot 捕获,避免后续 camera planning 改写前一个 camera 的 recording。 - URP features 的 `AddRenderPasses` 是 per-camera 声明点,不是 per-stage 回调。不要通过 - `RenderingData.stage` 分阶段重复 enqueue;pass 所属 stage 应由 `RenderPassEvent -> RendererBlock` + stage 数据分阶段重复 enqueue;`AddRenderPasses`/`SetupRenderPasses` 必须使用 `RendererPassQueueData`, + 而不是 recording 阶段的 `RenderingData`。pass 所属 stage 应由 `RenderPassEvent -> RendererBlock` 映射决定,renderer recording 再按 block range 消费同一份 queue。 - `RendererBlock` 将 pass events 映射到 camera stages:shadow caster、depth prepass、main opaque、main skybox、main transparent、post process 和 final output。 @@ -411,6 +413,9 @@ Scene data 每个 camera frame 提取一次,然后由 pipeline 调整。 fullscreen stage planner。 - `ScriptableRenderPass.CreateFramePlanSnapshot` 已接入 `RendererFramePlan` 生成路径。多 camera planning 会冻结 每个 camera 当时的 pass 状态,后续 camera 对复用 pass 实例的 `Configure` 不应污染已生成的 frame plan。 +- `AddRenderPasses`/`SetupRenderPasses` 已从 recording `RenderingData` 分离到 `RendererPassQueueData`。 + `RendererPassQueueData` 是 per-camera queue 声明数据,故意不携带 stage;stage 信息只应在 pass recording + 阶段通过 `RenderingData`/`ScriptableRenderContext` 消费。 - URP runtime-state invalidation 已覆盖 asset-level shadow/final-color settings 和 renderer-data-level main-scene/shadow-caster/depth-prepass block settings。配置变更会通过 runtime resource version 释放 renderer caches,并让后续 planning 重新生成 `RendererFramePlan` 和 stage manifest。 diff --git a/managed/CMakeLists.txt b/managed/CMakeLists.txt index bc61ff7e..fb7451a0 100644 --- a/managed/CMakeLists.txt +++ b/managed/CMakeLists.txt @@ -242,6 +242,7 @@ set(XCENGINE_RENDER_PIPELINES_UNIVERSAL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/RendererBlock.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/RendererBlocks.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/RendererCameraRequestContext.cs + ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/RendererPassQueueData.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/RendererRecordingContext.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/RenderingData.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/RenderingDataResolver.cs diff --git a/managed/GameScripts/RenderPipelineApiProbe.cs b/managed/GameScripts/RenderPipelineApiProbe.cs index 2306f8b5..80e55722 100644 --- a/managed/GameScripts/RenderPipelineApiProbe.cs +++ b/managed/GameScripts/RenderPipelineApiProbe.cs @@ -376,11 +376,10 @@ namespace Gameplay public override void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null || - !renderingData.isMainSceneStage) + passQueueData == null) { return; } @@ -428,10 +427,10 @@ namespace Gameplay public override void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null) + passQueueData == null) { return; } @@ -452,10 +451,10 @@ namespace Gameplay public override void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null) + passQueueData == null) { return; } @@ -592,11 +591,10 @@ namespace Gameplay public override void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null || - !renderingData.isMainSceneStage) + passQueueData == null) { return; } @@ -632,11 +630,10 @@ namespace Gameplay public override void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null || - !renderingData.isMainSceneStage) + passQueueData == null) { return; } @@ -1006,11 +1003,10 @@ namespace Gameplay public override void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null || - !renderingData.isMainSceneStage) + passQueueData == null) { return; } @@ -1232,11 +1228,10 @@ namespace Gameplay public override void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null || - !renderingData.isMainSceneStage) + passQueueData == null) { return; } @@ -1395,11 +1390,10 @@ namespace Gameplay public override void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null || - !renderingData.isMainSceneStage) + passQueueData == null) { return; } @@ -1752,23 +1746,23 @@ namespace Gameplay public override void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null) + passQueueData == null) { return; } - if (renderingData.framePlanId != 0UL && - renderingData.framePlanId != m_addRenderPassesFramePlanId) + if (passQueueData.framePlanId != 0UL && + passQueueData.framePlanId != m_addRenderPassesFramePlanId) { m_addRenderPassesFramePlanId = - renderingData.framePlanId; + passQueueData.framePlanId; m_addRenderPassesCallCount = 0; } - if (renderingData.framePlanId != 0UL) + if (passQueueData.framePlanId != 0UL) { m_addRenderPassesCallCount++; if (m_addRenderPassesCallCount > 1) @@ -1809,10 +1803,10 @@ namespace Gameplay public override void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null) + passQueueData == null) { return; } diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ColorScalePostProcessRendererFeature.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ColorScalePostProcessRendererFeature.cs index ca4923e3..fde2ad8d 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ColorScalePostProcessRendererFeature.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ColorScalePostProcessRendererFeature.cs @@ -73,10 +73,10 @@ namespace XCEngine.Rendering.Universal public override void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null) + passQueueData == null) { return; } @@ -84,7 +84,7 @@ namespace XCEngine.Rendering.Universal CreateInstance(); m_controller.EnqueuePass( renderer, - renderingData, + passQueueData, BuildSettings()); } diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RenderObjectsRendererFeature.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RenderObjectsRendererFeature.cs index f19e4aa2..5b6adf19 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RenderObjectsRendererFeature.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RenderObjectsRendererFeature.cs @@ -45,10 +45,10 @@ namespace XCEngine.Rendering.Universal public override void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null) + passQueueData == null) { return; } @@ -56,7 +56,7 @@ namespace XCEngine.Rendering.Universal CreateInstance(); m_controller.EnqueuePass( renderer, - renderingData, + passQueueData, BuildSettings()); } diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RendererPassQueueData.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RendererPassQueueData.cs new file mode 100644 index 00000000..c01c5e45 --- /dev/null +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RendererPassQueueData.cs @@ -0,0 +1,94 @@ +using XCEngine; +using XCEngine.Rendering; + +namespace XCEngine.Rendering.Universal +{ + public sealed class RendererPassQueueData + { + internal RendererPassQueueData( + int rendererIndex, + ulong framePlanId, + CameraData cameraData, + LightingData lightingData, + ShadowData shadowData, + EnvironmentData environmentData, + FinalColorData finalColorData) + { + this.rendererIndex = rendererIndex; + this.framePlanId = framePlanId; + this.cameraData = cameraData ?? CameraData.Default; + this.lightingData = lightingData ?? LightingData.Default; + this.shadowData = shadowData ?? ShadowData.Default; + this.environmentData = + environmentData ?? EnvironmentData.Default; + this.finalColorData = + finalColorData ?? FinalColorData.Default; + } + + internal static RendererPassQueueData CreatePlanning( + int rendererIndex, + bool finalColorRequiresProcessing, + ulong framePlanId) + { + return new RendererPassQueueData( + rendererIndex, + framePlanId, + CameraData.Default, + LightingData.Default, + ShadowData.Default, + EnvironmentData.Default, + finalColorRequiresProcessing + ? new FinalColorData( + CreatePlanningFinalColorSettings(), + true, + false) + : FinalColorData.Default); + } + + internal static RendererPassQueueData FromRenderingData( + RenderingData renderingData) + { + if (renderingData == null) + { + return CreatePlanning(-1, false, 0UL); + } + + return new RendererPassQueueData( + renderingData.rendererIndex, + renderingData.framePlanId, + renderingData.cameraData, + renderingData.lightingData, + renderingData.shadowData, + renderingData.environmentData, + renderingData.finalColorData); + } + + public int rendererIndex { get; } + + public ulong framePlanId { get; } + + public CameraData cameraData { get; } + + public LightingData lightingData { get; } + + public ShadowData shadowData { get; } + + public EnvironmentData environmentData { get; } + + public FinalColorData finalColorData { get; } + + private static FinalColorSettings + CreatePlanningFinalColorSettings() + { + FinalColorSettings settings = + FinalColorSettings.CreateDefault(); + settings.finalColorScale = + new Vector4( + 0.5f, + 0.5f, + 0.5f, + 1.0f); + return settings; + } + } +} diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RenderingData.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RenderingData.cs index 5b8c441c..22a132e9 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RenderingData.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RenderingData.cs @@ -39,28 +39,6 @@ namespace XCEngine.Rendering.Universal { } - internal static RenderingData CreatePlanning( - int rendererIndex, - bool finalColorRequiresProcessing, - ulong framePlanId) - { - return new RenderingData( - CameraFrameStage.MainScene, - rendererIndex, - framePlanId, - CameraData.Default, - LightingData.Default, - ShadowData.Default, - EnvironmentData.Default, - finalColorRequiresProcessing - ? new FinalColorData( - CreatePlanningFinalColorSettings(), - true, - false) - : FinalColorData.Default, - StageColorData.Default); - } - internal RenderingData(ScriptableRenderContext context) : this( context != null @@ -158,18 +136,5 @@ namespace XCEngine.Rendering.Universal public bool isFinalOutputStage => stage == CameraFrameStage.FinalOutput; - private static FinalColorSettings - CreatePlanningFinalColorSettings() - { - FinalColorSettings settings = - FinalColorSettings.CreateDefault(); - settings.finalColorScale = - new Vector4( - 0.5f, - 0.5f, - 0.5f, - 1.0f); - return settings; - } } } diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ScriptableRenderer.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ScriptableRenderer.cs index b25184fb..d2e943e4 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ScriptableRenderer.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ScriptableRenderer.cs @@ -120,7 +120,7 @@ namespace XCEngine.Rendering.Universal } protected virtual void AddRenderPasses( - RenderingData renderingData) + RendererPassQueueData passQueueData) { } @@ -210,7 +210,9 @@ namespace XCEngine.Rendering.Universal return false; } - BuildPassQueue(renderingData); + BuildPassQueue( + RendererPassQueueData.FromRenderingData( + renderingData)); try { return SupportsRendererStage(context); @@ -247,7 +249,9 @@ namespace XCEngine.Rendering.Universal return false; } - BuildPassQueue(renderingData); + BuildPassQueue( + RendererPassQueueData.FromRenderingData( + renderingData)); try { bool recorded; @@ -431,7 +435,7 @@ namespace XCEngine.Rendering.Universal ulong framePlanId = context.framePlanId; BuildPassQueue( - RenderingData.CreatePlanning( + RendererPassQueueData.CreatePlanning( rendererIndex, finalColorRequiresProcessing, framePlanId)); @@ -863,7 +867,7 @@ namespace XCEngine.Rendering.Universal } private void BuildPassQueue( - RenderingData renderingData) + RendererPassQueueData passQueueData) { ClearPassQueue(); @@ -877,13 +881,13 @@ namespace XCEngine.Rendering.Universal feature.SetupRenderPasses( this, - in renderingData); + in passQueueData); feature.AddRenderPasses( this, - ref renderingData); + ref passQueueData); } - AddRenderPasses(renderingData); + AddRenderPasses(passQueueData); m_rendererBlocks.Build(m_activePassQueue); } diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ScriptableRendererFeature.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ScriptableRendererFeature.cs index 5ebbd38e..a0b2e81a 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ScriptableRendererFeature.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ScriptableRendererFeature.cs @@ -91,22 +91,22 @@ namespace XCEngine.Rendering.Universal public virtual void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { } public virtual void AddRenderPasses( ScriptableRenderer renderer, - ref RenderingData renderingData) + ref RendererPassQueueData passQueueData) { AddRenderPasses( renderer, - renderingData); + passQueueData); } public virtual void SetupRenderPasses( ScriptableRenderer renderer, - in RenderingData renderingData) + in RendererPassQueueData passQueueData) { } diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalColorScalePostProcessController.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalColorScalePostProcessController.cs index 5c2eb783..7832a3dc 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalColorScalePostProcessController.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalColorScalePostProcessController.cs @@ -46,13 +46,13 @@ namespace XCEngine.Rendering.Universal public void EnqueuePass( ScriptableRenderer renderer, - RenderingData renderingData, + RendererPassQueueData passQueueData, ColorScalePostProcessSettings settings) { Create(settings); m_postProcessBlock.EnqueueRenderPass( renderer, - renderingData, + passQueueData, m_pass); } } diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalFinalOutputBlock.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalFinalOutputBlock.cs index c6aba029..7843ee76 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalFinalOutputBlock.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalFinalOutputBlock.cs @@ -34,15 +34,15 @@ namespace XCEngine.Rendering.Universal public void EnqueueRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null) + passQueueData == null) { return; } - if (!renderingData.finalColorData.requiresProcessing) + if (!passQueueData.finalColorData.requiresProcessing) { return; } diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalMainSceneFeatureUtility.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalMainSceneFeatureUtility.cs index 9eba9894..192a53e1 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalMainSceneFeatureUtility.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalMainSceneFeatureUtility.cs @@ -6,16 +6,16 @@ namespace XCEngine.Rendering.Universal internal static class UniversalMainSceneFeatureUtility { public static bool IsActive( - RenderingData renderingData) + RendererPassQueueData passQueueData) { - return renderingData != null; + return passQueueData != null; } public static bool SupportsPass( - RenderingData renderingData, + RendererPassQueueData passQueueData, ScriptableRenderPass renderPass) { - return IsActive(renderingData) && + return IsActive(passQueueData) && renderPass != null && renderPass.SupportsStage( CameraFrameStage.MainScene); @@ -23,12 +23,12 @@ namespace XCEngine.Rendering.Universal public static bool EnqueuePass( ScriptableRenderer renderer, - RenderingData renderingData, + RendererPassQueueData passQueueData, ScriptableRenderPass renderPass) { if (renderer == null || !SupportsPass( - renderingData, + passQueueData, renderPass)) { return false; diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalPostProcessBlock.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalPostProcessBlock.cs index 17633c37..553e8a45 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalPostProcessBlock.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalPostProcessBlock.cs @@ -10,10 +10,10 @@ namespace XCEngine.Rendering.Universal { public void EnqueueRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null) + passQueueData == null) { return; } @@ -64,11 +64,11 @@ namespace XCEngine.Rendering.Universal public void EnqueueRenderPass( ScriptableRenderer renderer, - RenderingData renderingData, + RendererPassQueueData passQueueData, ScriptableRenderPass renderPass) { if (renderer == null || - renderingData == null || + passQueueData == null || renderPass == null) { return; diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderObjectsFeatureController.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderObjectsFeatureController.cs index b093a8a5..8263ecc0 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderObjectsFeatureController.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderObjectsFeatureController.cs @@ -42,13 +42,13 @@ namespace XCEngine.Rendering.Universal public void EnqueuePass( ScriptableRenderer renderer, - RenderingData renderingData, + RendererPassQueueData passQueueData, RenderObjectsFeatureSettings settings) { Create(settings); UniversalMainSceneFeatureUtility.EnqueuePass( renderer, - renderingData, + passQueueData, m_pass); } } diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderer.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderer.cs index 42fec790..94395c9e 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderer.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderer.cs @@ -84,7 +84,7 @@ namespace XCEngine.Rendering.Universal } protected override void AddRenderPasses( - RenderingData renderingData) + RendererPassQueueData passQueueData) { m_shadowCasterBlock.EnqueueRenderPasses( this, @@ -97,10 +97,10 @@ namespace XCEngine.Rendering.Universal m_rendererData.GetMainSceneInstance()); m_postProcessBlock.EnqueueRenderPasses( this, - renderingData); + passQueueData); m_finalOutputBlock.EnqueueRenderPasses( this, - renderingData); + passQueueData); } } } diff --git a/project/Assets/Scripts/ProjectRenderPipelineProbe.cs b/project/Assets/Scripts/ProjectRenderPipelineProbe.cs index eff468a6..0d22b829 100644 --- a/project/Assets/Scripts/ProjectRenderPipelineProbe.cs +++ b/project/Assets/Scripts/ProjectRenderPipelineProbe.cs @@ -80,11 +80,10 @@ namespace ProjectScripts public override void AddRenderPasses( ScriptableRenderer renderer, - RenderingData renderingData) + RendererPassQueueData passQueueData) { if (renderer == null || - renderingData == null || - !renderingData.isPostProcessStage) + passQueueData == null) { return; } @@ -172,17 +171,33 @@ namespace ProjectScripts public sealed class ProjectCustomRenderer : ScriptableRenderer { - private readonly DrawObjectsPass m_opaquePass = - new DrawObjectsPass( - RenderPassEvent.RenderOpaques, - RendererListDesc.CreateDefault( - RendererListType.Opaque)); + private sealed class ProjectCustomOpaquePass + : ScriptableRenderPass + { + public ProjectCustomOpaquePass() + { + renderPassEvent = + RenderPassEvent.RenderOpaques; + } + + protected override bool RecordRenderGraph( + ScriptableRenderContext context, + RenderingData renderingData) + { + return context != null && + renderingData != null && + renderingData.isMainSceneStage && + context.DrawOpaqueRenderers(); + } + } + + private readonly ProjectCustomOpaquePass m_opaquePass = + new ProjectCustomOpaquePass(); protected override void AddRenderPasses( - RenderingData renderingData) + RendererPassQueueData passQueueData) { - if (renderingData == null || - !renderingData.isMainSceneStage) + if (passQueueData == null) { return; }