Align URP scene drawing with RenderGraph renderer lists

This commit is contained in:
2026-04-28 00:03:24 +08:00
parent 6b488d5eac
commit 03967b152d
13 changed files with 908 additions and 48 deletions

View File

@@ -30,5 +30,53 @@ namespace XCEngine.Rendering.RenderGraphModule
return m_context.AddRasterPass(passName);
}
public XCEngine.Rendering.RendererListHandle
CreateRendererList(
XCEngine.Rendering.RendererListDesc rendererListDesc)
{
return CreateRendererList(
rendererListDesc,
XCEngine.Rendering.DrawingSettings.CreateDefault());
}
public XCEngine.Rendering.RendererListHandle
CreateRendererList(
XCEngine.Rendering.RendererListDesc rendererListDesc,
XCEngine.Rendering.DrawingSettings drawingSettings)
{
if (m_context == null)
{
throw new InvalidOperationException(
"RenderGraph is not bound to a recording context.");
}
return m_context.CreateRendererList(
rendererListDesc,
drawingSettings);
}
internal string passName =>
m_context != null
? m_context.passName
: string.Empty;
public XCEngine.Rendering.RenderGraphTextureHandle
sourceColorTexture =>
m_context != null
? m_context.sourceColorTexture
: default;
public XCEngine.Rendering.RenderGraphTextureHandle
primaryColorTarget =>
m_context != null
? m_context.primaryColorTarget
: default;
public XCEngine.Rendering.RenderGraphTextureHandle
depthTarget =>
m_context != null
? m_context.depthTarget
: default;
}
}

View File

@@ -42,6 +42,8 @@ namespace XCEngine.Rendering
new List<RenderGraphTextureHandle>();
private readonly List<RenderGraphTextureHandle> m_readDepthTextures =
new List<RenderGraphTextureHandle>();
private readonly List<RendererListHandle> m_rendererLists =
new List<RendererListHandle>();
private readonly List<TextureBindingRequest> m_textureBindings =
new List<TextureBindingRequest>();
private readonly List<RenderGraphTextureHandle> m_colorAttachments =
@@ -123,6 +125,27 @@ namespace XCEngine.Rendering
return this;
}
public RenderGraphRasterPassBuilder UseRendererList(
RendererListHandle rendererList)
{
if (!rendererList.isValid)
{
return this;
}
for (int i = 0; i < m_rendererLists.Count; ++i)
{
if (m_rendererLists[i].nativeIndex ==
rendererList.nativeIndex)
{
return this;
}
}
m_rendererLists.Add(rendererList);
return this;
}
public RenderGraphRasterPassBuilder SetColorAttachment(
RenderGraphTextureHandle texture,
int index = 0)
@@ -309,6 +332,25 @@ namespace XCEngine.Rendering
}
}
for (int i = 0; i < m_rendererLists.Count; ++i)
{
RendererListHandle rendererList =
m_rendererLists[i];
if (!rendererList.isValid)
{
continue;
}
if (!InternalCalls
.Rendering_ScriptableRenderContext_AddRasterPassRendererList(
m_context.nativeHandle,
nativePassHandle,
rendererList.nativeIndex))
{
return false;
}
}
for (int i = 0; i < m_colorAttachments.Count; ++i)
{
RenderGraphTextureHandle colorAttachment =