2026-04-19 02:38:48 +08:00
|
|
|
using XCEngine;
|
2026-04-18 13:51:09 +08:00
|
|
|
|
2026-04-19 02:38:48 +08:00
|
|
|
namespace XCEngine.Rendering
|
2026-04-17 21:53:52 +08:00
|
|
|
{
|
|
|
|
|
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);
|
|
|
|
|
|
2026-04-21 00:53:35 +08:00
|
|
|
public int rendererIndex =>
|
|
|
|
|
InternalCalls
|
|
|
|
|
.Rendering_ScriptableRenderContext_GetRendererIndex(
|
|
|
|
|
m_nativeHandle);
|
|
|
|
|
|
2026-04-20 18:54:04 +08:00
|
|
|
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));
|
|
|
|
|
|
|
|
|
|
public bool RecordScene()
|
|
|
|
|
{
|
|
|
|
|
return RecordBeforeOpaqueInjection() &&
|
2026-04-20 23:02:49 +08:00
|
|
|
DrawOpaqueRenderers() &&
|
2026-04-20 18:54:04 +08:00
|
|
|
RecordAfterOpaqueInjection() &&
|
|
|
|
|
RecordBeforeSkyboxInjection() &&
|
2026-04-20 23:02:49 +08:00
|
|
|
DrawSkybox() &&
|
2026-04-20 18:54:04 +08:00
|
|
|
RecordAfterSkyboxInjection() &&
|
|
|
|
|
RecordBeforeTransparentInjection() &&
|
2026-04-20 23:02:49 +08:00
|
|
|
DrawTransparentRenderers() &&
|
2026-04-20 18:54:04 +08:00
|
|
|
RecordAfterTransparentInjection();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool RecordScenePhase(
|
|
|
|
|
SceneRenderPhase scenePhase)
|
|
|
|
|
{
|
|
|
|
|
return InternalCalls
|
|
|
|
|
.Rendering_ScriptableRenderContext_RecordScenePhase(
|
|
|
|
|
m_nativeHandle,
|
|
|
|
|
(int)scenePhase);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool RecordSceneInjectionPoint(
|
|
|
|
|
SceneRenderInjectionPoint injectionPoint)
|
|
|
|
|
{
|
|
|
|
|
return InternalCalls
|
|
|
|
|
.Rendering_ScriptableRenderContext_RecordSceneInjectionPoint(
|
|
|
|
|
m_nativeHandle,
|
|
|
|
|
(int)injectionPoint);
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-21 01:54:02 +08:00
|
|
|
public bool RecordNativeSceneFeaturePass(
|
|
|
|
|
string featurePassName)
|
|
|
|
|
{
|
|
|
|
|
return !string.IsNullOrEmpty(
|
|
|
|
|
featurePassName) &&
|
|
|
|
|
InternalCalls
|
|
|
|
|
.Rendering_ScriptableRenderContext_RecordNativeSceneFeaturePass(
|
|
|
|
|
m_nativeHandle,
|
|
|
|
|
featurePassName);
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-20 18:54:04 +08:00
|
|
|
public bool DrawRenderers(
|
|
|
|
|
SceneRenderPhase scenePhase,
|
|
|
|
|
RendererListType rendererListType)
|
2026-04-20 22:46:19 +08:00
|
|
|
{
|
|
|
|
|
return DrawRenderers(
|
|
|
|
|
scenePhase,
|
|
|
|
|
rendererListType,
|
|
|
|
|
DrawingSettings.CreateDefault());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool DrawRenderers(
|
|
|
|
|
SceneRenderPhase scenePhase,
|
|
|
|
|
RendererListType rendererListType,
|
|
|
|
|
DrawingSettings drawingSettings)
|
2026-04-20 22:05:38 +08:00
|
|
|
{
|
|
|
|
|
return DrawRenderers(
|
|
|
|
|
scenePhase,
|
|
|
|
|
RendererListDesc.CreateDefault(
|
2026-04-20 22:46:19 +08:00
|
|
|
rendererListType),
|
|
|
|
|
drawingSettings);
|
2026-04-20 22:05:38 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool DrawRenderers(
|
|
|
|
|
SceneRenderPhase scenePhase,
|
|
|
|
|
RendererListDesc rendererListDesc)
|
2026-04-20 22:46:19 +08:00
|
|
|
{
|
|
|
|
|
return DrawRenderers(
|
|
|
|
|
scenePhase,
|
|
|
|
|
rendererListDesc,
|
|
|
|
|
DrawingSettings.CreateDefault());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool DrawRenderers(
|
|
|
|
|
SceneRenderPhase scenePhase,
|
|
|
|
|
RendererListDesc rendererListDesc,
|
|
|
|
|
DrawingSettings drawingSettings)
|
2026-04-20 18:54:04 +08:00
|
|
|
{
|
2026-04-20 23:21:04 +08:00
|
|
|
RenderStateBlock renderStateBlock =
|
|
|
|
|
drawingSettings.renderStateBlock;
|
2026-04-20 18:54:04 +08:00
|
|
|
return InternalCalls
|
2026-04-20 22:05:38 +08:00
|
|
|
.Rendering_ScriptableRenderContext_DrawRenderersByDesc(
|
2026-04-20 18:54:04 +08:00
|
|
|
m_nativeHandle,
|
|
|
|
|
(int)scenePhase,
|
2026-04-20 22:46:19 +08:00
|
|
|
ref rendererListDesc,
|
|
|
|
|
drawingSettings.overrideMaterialPath ??
|
2026-04-20 22:58:08 +08:00
|
|
|
string.Empty,
|
|
|
|
|
drawingSettings.shaderPassName ??
|
2026-04-20 23:21:04 +08:00
|
|
|
string.Empty,
|
|
|
|
|
ref renderStateBlock);
|
2026-04-20 18:54:04 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool RecordOpaqueScenePhase()
|
|
|
|
|
{
|
|
|
|
|
return RecordScenePhase(
|
|
|
|
|
SceneRenderPhase.Opaque);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool RecordSkyboxScenePhase()
|
|
|
|
|
{
|
|
|
|
|
return RecordScenePhase(
|
|
|
|
|
SceneRenderPhase.Skybox);
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-20 23:02:49 +08:00
|
|
|
public bool DrawSkybox()
|
|
|
|
|
{
|
|
|
|
|
return RecordScenePhase(
|
|
|
|
|
SceneRenderPhase.Skybox);
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-20 18:54:04 +08:00
|
|
|
public bool RecordTransparentScenePhase()
|
|
|
|
|
{
|
|
|
|
|
return RecordScenePhase(
|
|
|
|
|
SceneRenderPhase.Transparent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool RecordBeforeOpaqueInjection()
|
|
|
|
|
{
|
|
|
|
|
return RecordSceneInjectionPoint(
|
|
|
|
|
SceneRenderInjectionPoint.BeforeOpaque);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool RecordAfterOpaqueInjection()
|
|
|
|
|
{
|
|
|
|
|
return RecordSceneInjectionPoint(
|
|
|
|
|
SceneRenderInjectionPoint.AfterOpaque);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool RecordBeforeSkyboxInjection()
|
|
|
|
|
{
|
|
|
|
|
return RecordSceneInjectionPoint(
|
|
|
|
|
SceneRenderInjectionPoint.BeforeSkybox);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool RecordAfterSkyboxInjection()
|
|
|
|
|
{
|
|
|
|
|
return RecordSceneInjectionPoint(
|
|
|
|
|
SceneRenderInjectionPoint.AfterSkybox);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool RecordBeforeTransparentInjection()
|
|
|
|
|
{
|
|
|
|
|
return RecordSceneInjectionPoint(
|
|
|
|
|
SceneRenderInjectionPoint.BeforeTransparent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool RecordAfterTransparentInjection()
|
|
|
|
|
{
|
|
|
|
|
return RecordSceneInjectionPoint(
|
|
|
|
|
SceneRenderInjectionPoint.AfterTransparent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool DrawOpaqueRenderers()
|
|
|
|
|
{
|
|
|
|
|
return DrawRenderers(
|
|
|
|
|
SceneRenderPhase.Opaque,
|
2026-04-20 22:05:38 +08:00
|
|
|
RendererListDesc.CreateDefault(
|
|
|
|
|
RendererListType.Opaque));
|
2026-04-20 18:54:04 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool DrawTransparentRenderers()
|
|
|
|
|
{
|
|
|
|
|
return DrawRenderers(
|
|
|
|
|
SceneRenderPhase.Transparent,
|
2026-04-20 22:05:38 +08:00
|
|
|
RendererListDesc.CreateDefault(
|
|
|
|
|
RendererListType.Transparent));
|
2026-04-20 18:54:04 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public RenderGraphRasterPassBuilder AddRasterPass(
|
|
|
|
|
string passName)
|
|
|
|
|
{
|
|
|
|
|
return new RenderGraphRasterPassBuilder(
|
|
|
|
|
this,
|
|
|
|
|
passName);
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-19 14:19:57 +08:00
|
|
|
internal ulong nativeHandle =>
|
|
|
|
|
m_nativeHandle;
|
2026-04-17 21:53:52 +08:00
|
|
|
}
|
|
|
|
|
}
|
2026-04-19 02:38:48 +08:00
|
|
|
|