Add URP RenderGraph API compatibility surface

This commit is contained in:
2026-04-25 15:51:05 +08:00
parent c0c0bbdfa3
commit 5f73b35c0f
8 changed files with 246 additions and 20 deletions

View File

@@ -1,6 +1,8 @@
using System;
using System.Reflection;
using XCEngine;
using XCEngine.Rendering;
using XCEngine.Rendering.RenderGraphModule;
namespace XCEngine.Rendering.Universal
{
@@ -81,6 +83,19 @@ namespace XCEngine.Rendering.Universal
try
{
if (HasPublicRenderGraphOverride())
{
using (ContextContainer frameData =
new ContextContainer())
{
RecordRenderGraph(
new RenderGraph(context),
frameData);
}
return true;
}
return RecordRenderGraph(
context,
passRenderingData);
@@ -114,6 +129,12 @@ namespace XCEngine.Rendering.Universal
{
}
public virtual void RecordRenderGraph(
RenderGraph renderGraph,
ContextContainer frameData)
{
}
protected virtual bool RecordRenderGraph(
ScriptableRenderContext context,
RenderingData renderingData)
@@ -402,6 +423,24 @@ namespace XCEngine.Rendering.Universal
rhs.renderPassEvent);
}
private bool HasPublicRenderGraphOverride()
{
MethodInfo method = GetType().GetMethod(
nameof(RecordRenderGraph),
BindingFlags.Instance |
BindingFlags.Public,
null,
new Type[]
{
typeof(RenderGraph),
typeof(ContextContainer)
},
null);
return method != null &&
method.DeclaringType !=
typeof(ScriptableRenderPass);
}
private static bool TryResolveDefaultFullscreenTargets(
ScriptableRenderContext context,
out RenderGraphTextureHandle sourceColor,