Files
XCEngine/managed/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderContext.cs
ssdfasd cee65fcf40 feat(srp): add descriptor-driven object draw authoring
- bridge renderer list descriptors into ScriptableRenderContext scene draw calls
- reuse DrawObjectsPass across Universal and project custom renderers
- add RenderObjectsRendererFeature for package-level object draw extension
2026-04-20 22:05:38 +08:00

205 lines
6.3 KiB
C#

using XCEngine;
namespace XCEngine.Rendering
{
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 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() &&
RecordOpaqueScenePhase() &&
RecordAfterOpaqueInjection() &&
RecordBeforeSkyboxInjection() &&
RecordSkyboxScenePhase() &&
RecordAfterSkyboxInjection() &&
RecordBeforeTransparentInjection() &&
RecordTransparentScenePhase() &&
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);
}
public bool DrawRenderers(
SceneRenderPhase scenePhase,
RendererListType rendererListType)
{
return DrawRenderers(
scenePhase,
RendererListDesc.CreateDefault(
rendererListType));
}
public bool DrawRenderers(
SceneRenderPhase scenePhase,
RendererListDesc rendererListDesc)
{
return InternalCalls
.Rendering_ScriptableRenderContext_DrawRenderersByDesc(
m_nativeHandle,
(int)scenePhase,
ref rendererListDesc);
}
public bool RecordOpaqueScenePhase()
{
return RecordScenePhase(
SceneRenderPhase.Opaque);
}
public bool RecordSkyboxScenePhase()
{
return RecordScenePhase(
SceneRenderPhase.Skybox);
}
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,
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));
}
public RenderGraphRasterPassBuilder AddRasterPass(
string passName)
{
return new RenderGraphRasterPassBuilder(
this,
passName);
}
internal ulong nativeHandle =>
m_nativeHandle;
}
}