Align URP render graph frame data scope

This commit is contained in:
2026-04-26 20:51:16 +08:00
parent ee05558f86
commit db2d3eb414
13 changed files with 918 additions and 73 deletions

View File

@@ -1,6 +1,7 @@
using System.Collections.Generic;
using XCEngine;
using XCEngine.Rendering;
using XCEngine.Rendering.RenderGraphModule;
namespace XCEngine.Rendering.Universal
{
@@ -170,8 +171,17 @@ namespace XCEngine.Rendering.Universal
RenderingData renderingData =
context.renderingData;
BuildPassQueue(renderingData);
bool recorded =
RecordRendererStage(context);
bool recorded;
using (ContextContainer frameData =
ScriptableRenderPass.BuildRenderGraphFrameData(
renderingData))
{
recorded =
RecordRendererStage(
context,
new RenderGraph(context.renderContext),
frameData);
}
if (recorded)
{
FinishCameraStackRendering();
@@ -299,7 +309,9 @@ namespace XCEngine.Rendering.Universal
}
protected virtual bool RecordRendererStage(
RendererRecordingContext context)
RendererRecordingContext context,
RenderGraph renderGraph,
ContextContainer frameData)
{
if (context == null ||
context.renderContext == null)
@@ -314,38 +326,52 @@ namespace XCEngine.Rendering.Universal
return RecordRendererBlock(
RendererBlock.ShadowCaster,
context,
renderGraph,
frameData,
ref recordedAnyPass) &&
recordedAnyPass;
case CameraFrameStage.DepthOnly:
return RecordRendererBlock(
RendererBlock.DepthPrepass,
context,
renderGraph,
frameData,
ref recordedAnyPass) &&
recordedAnyPass;
case CameraFrameStage.MainScene:
return RecordRendererBlock(
RendererBlock.MainOpaque,
context,
renderGraph,
frameData,
ref recordedAnyPass) &&
RecordRendererBlock(
RendererBlock.MainSkybox,
context,
renderGraph,
frameData,
ref recordedAnyPass) &&
RecordRendererBlock(
RendererBlock.MainTransparent,
context,
renderGraph,
frameData,
ref recordedAnyPass) &&
recordedAnyPass;
case CameraFrameStage.PostProcess:
return RecordRendererBlock(
RendererBlock.PostProcess,
context,
renderGraph,
frameData,
ref recordedAnyPass) &&
recordedAnyPass;
case CameraFrameStage.FinalOutput:
return RecordRendererBlock(
RendererBlock.FinalOutput,
context,
renderGraph,
frameData,
ref recordedAnyPass) &&
recordedAnyPass;
default:
@@ -356,6 +382,8 @@ namespace XCEngine.Rendering.Universal
private bool RecordRendererBlock(
RendererBlock block,
RendererRecordingContext context,
RenderGraph renderGraph,
ContextContainer frameData,
ref bool recordedAnyPass)
{
if (context == null ||
@@ -388,7 +416,9 @@ namespace XCEngine.Rendering.Universal
if (!renderPass.Record(
context.renderContext,
context.renderingData))
context.renderingData,
renderGraph,
frameData))
{
return false;
}