Align URP scene drawing with RenderGraph renderer lists
This commit is contained in:
@@ -437,6 +437,11 @@ namespace XCEngine
|
||||
Rendering_ScriptableRenderContext_GetFramePlanId(
|
||||
ulong nativeHandle);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern string
|
||||
Rendering_ScriptableRenderContext_GetPassName(
|
||||
ulong nativeHandle);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern int
|
||||
Rendering_ScriptableRenderContext_GetSourceColorTextureHandle(
|
||||
@@ -507,6 +512,13 @@ namespace XCEngine
|
||||
int textureHandle,
|
||||
bool isDepth);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern bool
|
||||
Rendering_ScriptableRenderContext_AddRasterPassRendererList(
|
||||
ulong nativeHandle,
|
||||
ulong rasterPassHandle,
|
||||
int rendererListHandle);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern bool
|
||||
Rendering_ScriptableRenderContext_SetRasterPassColorAttachment(
|
||||
@@ -564,6 +576,17 @@ namespace XCEngine
|
||||
ulong nativeHandle,
|
||||
ref Color color);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern bool
|
||||
Rendering_CommandBuffer_DrawRendererList(
|
||||
ulong nativeHandle,
|
||||
int rendererListHandle);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern bool
|
||||
Rendering_CommandBuffer_DrawSkybox(
|
||||
ulong nativeHandle);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern int
|
||||
Rendering_ScriptableRenderPipelinePlanningContext_GetRendererIndex(
|
||||
@@ -927,6 +950,15 @@ namespace XCEngine
|
||||
string shaderPassName,
|
||||
ref Rendering.RenderStateBlock renderStateBlock);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern int
|
||||
Rendering_ScriptableRenderContext_CreateRendererList(
|
||||
ulong nativeHandle,
|
||||
ref Rendering.RendererListDesc rendererListDesc,
|
||||
string overrideMaterialPath,
|
||||
string shaderPassName,
|
||||
ref Rendering.RenderStateBlock renderStateBlock);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern int
|
||||
Rendering_CameraRenderRequestContext_GetRenderedBaseCameraCount(
|
||||
|
||||
@@ -38,6 +38,23 @@ namespace XCEngine.Rendering
|
||||
ref color);
|
||||
}
|
||||
|
||||
public bool DrawRendererList(
|
||||
RendererListHandle rendererList)
|
||||
{
|
||||
return m_nativeHandle != 0ul &&
|
||||
rendererList.isValid &&
|
||||
InternalCalls.Rendering_CommandBuffer_DrawRendererList(
|
||||
m_nativeHandle,
|
||||
rendererList.nativeIndex);
|
||||
}
|
||||
|
||||
public bool DrawSkybox()
|
||||
{
|
||||
return m_nativeHandle != 0ul &&
|
||||
InternalCalls.Rendering_CommandBuffer_DrawSkybox(
|
||||
m_nativeHandle);
|
||||
}
|
||||
|
||||
private readonly ulong m_nativeHandle;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public struct RendererListHandle
|
||||
{
|
||||
private readonly int m_indexPlusOne;
|
||||
|
||||
private RendererListHandle(
|
||||
int indexPlusOne)
|
||||
{
|
||||
m_indexPlusOne = indexPlusOne;
|
||||
}
|
||||
|
||||
public bool isValid =>
|
||||
m_indexPlusOne > 0;
|
||||
|
||||
internal int nativeIndex =>
|
||||
m_indexPlusOne > 0
|
||||
? m_indexPlusOne - 1
|
||||
: -1;
|
||||
|
||||
internal static RendererListHandle FromNativeIndex(
|
||||
int nativeIndex)
|
||||
{
|
||||
return nativeIndex >= 0
|
||||
? new RendererListHandle(nativeIndex + 1)
|
||||
: default;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,11 @@ namespace XCEngine.Rendering
|
||||
.Rendering_ScriptableRenderContext_GetFramePlanId(
|
||||
m_nativeHandle);
|
||||
|
||||
internal string passName =>
|
||||
InternalCalls
|
||||
.Rendering_ScriptableRenderContext_GetPassName(
|
||||
m_nativeHandle) ?? string.Empty;
|
||||
|
||||
public RenderGraphTextureHandle sourceColorTexture =>
|
||||
RenderGraphTextureHandle.FromNativeIndex(
|
||||
InternalCalls
|
||||
@@ -171,6 +176,23 @@ namespace XCEngine.Rendering
|
||||
name));
|
||||
}
|
||||
|
||||
internal RendererListHandle CreateRendererList(
|
||||
RendererListDesc rendererListDesc,
|
||||
DrawingSettings drawingSettings)
|
||||
{
|
||||
RenderStateBlock renderStateBlock =
|
||||
drawingSettings.renderStateBlock;
|
||||
return RendererListHandle.FromNativeIndex(
|
||||
InternalCalls
|
||||
.Rendering_ScriptableRenderContext_CreateRendererList(
|
||||
m_nativeHandle,
|
||||
ref rendererListDesc,
|
||||
drawingSettings.overrideMaterialPath ??
|
||||
string.Empty,
|
||||
drawingSettings.shaderPassName ?? string.Empty,
|
||||
ref renderStateBlock));
|
||||
}
|
||||
|
||||
// Public RenderGraph raster authoring entry point. Built-in fullscreen
|
||||
// kernels are internal URP implementation details, not public context
|
||||
// shortcuts.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user