183 lines
6.0 KiB
C#
183 lines
6.0 KiB
C#
using XCEngine;
|
|
|
|
namespace XCEngine.Rendering
|
|
{
|
|
// SRP v1 managed recording surface. Scene draws still delegate to the
|
|
// native SceneDrawBackend, and raster-pass recording is limited to the
|
|
// fullscreen PostProcess / FinalOutput stages.
|
|
public sealed class ScriptableRenderContext
|
|
{
|
|
private readonly ulong m_nativeHandle;
|
|
|
|
internal ScriptableRenderContext(ulong nativeHandle)
|
|
{
|
|
m_nativeHandle = nativeHandle;
|
|
}
|
|
|
|
public CameraFrameStage stage =>
|
|
(CameraFrameStage)InternalCalls.Rendering_ScriptableRenderContext_GetStage(
|
|
m_nativeHandle);
|
|
|
|
public int rendererIndex =>
|
|
InternalCalls
|
|
.Rendering_ScriptableRenderContext_GetRendererIndex(
|
|
m_nativeHandle);
|
|
|
|
public RenderGraphTextureHandle sourceColorTexture =>
|
|
RenderGraphTextureHandle.FromNativeIndex(
|
|
InternalCalls
|
|
.Rendering_ScriptableRenderContext_GetSourceColorTextureHandle(
|
|
m_nativeHandle));
|
|
|
|
public RenderGraphTextureHandle primaryColorTarget =>
|
|
RenderGraphTextureHandle.FromNativeIndex(
|
|
InternalCalls
|
|
.Rendering_ScriptableRenderContext_GetPrimaryColorTargetHandle(
|
|
m_nativeHandle));
|
|
|
|
public RenderGraphTextureHandle depthTarget =>
|
|
RenderGraphTextureHandle.FromNativeIndex(
|
|
InternalCalls
|
|
.Rendering_ScriptableRenderContext_GetDepthTargetHandle(
|
|
m_nativeHandle));
|
|
|
|
internal bool RecordScene()
|
|
{
|
|
return DrawOpaqueRenderers() &&
|
|
DrawSkybox() &&
|
|
DrawTransparentRenderers();
|
|
}
|
|
|
|
internal bool RecordScenePhase(
|
|
SceneRenderPhase scenePhase)
|
|
{
|
|
return InternalCalls
|
|
.Rendering_ScriptableRenderContext_RecordScenePhase(
|
|
m_nativeHandle,
|
|
(int)scenePhase);
|
|
}
|
|
|
|
public bool DrawRenderers(
|
|
SceneRenderPhase scenePhase,
|
|
RendererListType rendererListType)
|
|
{
|
|
return DrawRenderers(
|
|
scenePhase,
|
|
rendererListType,
|
|
DrawingSettings.CreateDefault());
|
|
}
|
|
|
|
public bool DrawRenderers(
|
|
SceneRenderPhase scenePhase,
|
|
RendererListType rendererListType,
|
|
DrawingSettings drawingSettings)
|
|
{
|
|
return DrawRenderers(
|
|
scenePhase,
|
|
RendererListDesc.CreateDefault(
|
|
rendererListType),
|
|
drawingSettings);
|
|
}
|
|
|
|
public bool DrawRenderers(
|
|
SceneRenderPhase scenePhase,
|
|
RendererListDesc rendererListDesc)
|
|
{
|
|
return DrawRenderers(
|
|
scenePhase,
|
|
rendererListDesc,
|
|
DrawingSettings.CreateDefault());
|
|
}
|
|
|
|
public bool DrawRenderers(
|
|
SceneRenderPhase scenePhase,
|
|
RendererListDesc rendererListDesc,
|
|
DrawingSettings drawingSettings)
|
|
{
|
|
RenderStateBlock renderStateBlock =
|
|
drawingSettings.renderStateBlock;
|
|
return InternalCalls
|
|
.Rendering_ScriptableRenderContext_DrawRenderersByDesc(
|
|
m_nativeHandle,
|
|
(int)scenePhase,
|
|
ref rendererListDesc,
|
|
drawingSettings.overrideMaterialPath ??
|
|
string.Empty,
|
|
drawingSettings.shaderPassName ??
|
|
string.Empty,
|
|
ref renderStateBlock);
|
|
}
|
|
|
|
public bool DrawSkybox()
|
|
{
|
|
return RecordScenePhase(
|
|
SceneRenderPhase.Skybox);
|
|
}
|
|
|
|
public bool DrawOpaqueRenderers()
|
|
{
|
|
return DrawRenderers(
|
|
SceneRenderPhase.Opaque,
|
|
RendererListDesc.CreateDefault(
|
|
RendererListType.Opaque));
|
|
}
|
|
|
|
public bool DrawTransparentRenderers()
|
|
{
|
|
return DrawRenderers(
|
|
SceneRenderPhase.Transparent,
|
|
RendererListDesc.CreateDefault(
|
|
RendererListType.Transparent));
|
|
}
|
|
|
|
public RenderGraphTextureHandle CreateTransientTexture(
|
|
string name,
|
|
RenderGraphTextureDesc desc)
|
|
{
|
|
return RenderGraphTextureHandle.FromNativeIndex(
|
|
InternalCalls
|
|
.Rendering_ScriptableRenderContext_CreateTransientTexture(
|
|
m_nativeHandle,
|
|
name,
|
|
ref desc));
|
|
}
|
|
|
|
public RenderGraphTextureHandle
|
|
CreateFullscreenTransientColorTexture(
|
|
string name)
|
|
{
|
|
return RenderGraphTextureHandle.FromNativeIndex(
|
|
InternalCalls
|
|
.Rendering_ScriptableRenderContext_CreateFullscreenTransientColorTexture(
|
|
m_nativeHandle,
|
|
name));
|
|
}
|
|
|
|
public RenderGraphTextureHandle
|
|
CreateFullscreenTransientDepthTexture(
|
|
string name)
|
|
{
|
|
return RenderGraphTextureHandle.FromNativeIndex(
|
|
InternalCalls
|
|
.Rendering_ScriptableRenderContext_CreateFullscreenTransientDepthTexture(
|
|
m_nativeHandle,
|
|
name));
|
|
}
|
|
|
|
// SRP v1 wrapper over managed fullscreen raster requests. Commit only
|
|
// succeeds on fullscreen sequence stages and the execution kinds remain
|
|
// limited to the built-in fullscreen pass family.
|
|
public RenderGraphRasterPassBuilder AddRasterPass(
|
|
string passName)
|
|
{
|
|
return new RenderGraphRasterPassBuilder(
|
|
this,
|
|
passName);
|
|
}
|
|
|
|
internal ulong nativeHandle =>
|
|
m_nativeHandle;
|
|
}
|
|
}
|
|
|