feat(srp): add camera-driven universal renderer selection

This commit is contained in:
2026-04-21 00:53:35 +08:00
parent a6f7530855
commit e123e584c8
17 changed files with 391 additions and 7 deletions

View File

@@ -389,6 +389,11 @@ namespace XCEngine
internal static extern int Rendering_ScriptableRenderContext_GetStage(
ulong nativeHandle);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern int
Rendering_ScriptableRenderContext_GetRendererIndex(
ulong nativeHandle);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern int
Rendering_ScriptableRenderContext_GetSourceColorTextureHandle(
@@ -473,6 +478,11 @@ namespace XCEngine
ulong nativeHandle,
ulong rasterPassHandle);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern int
Rendering_ScriptableRenderPipelinePlanningContext_GetRendererIndex(
ulong nativeHandle);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern bool
Rendering_ScriptableRenderPipelinePlanningContext_IsStageRequested(
@@ -802,6 +812,22 @@ namespace XCEngine
Rendering_CameraRenderRequestContext_GetRenderedRequestCount(
ulong nativeHandle);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern ulong
Rendering_CameraRenderRequestContext_GetCameraGameObjectUUID(
ulong nativeHandle);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern int
Rendering_CameraRenderRequestContext_GetRendererIndex(
ulong nativeHandle);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void
Rendering_CameraRenderRequestContext_SetRendererIndex(
ulong nativeHandle,
int rendererIndex);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern bool
Rendering_CameraRenderRequestContext_GetHasDirectionalShadow(

View File

@@ -21,6 +21,38 @@ namespace XCEngine.Rendering
.Rendering_CameraRenderRequestContext_GetRenderedRequestCount(
m_nativeHandle);
public Camera camera
{
get
{
ulong cameraGameObjectUUID =
InternalCalls
.Rendering_CameraRenderRequestContext_GetCameraGameObjectUUID(
m_nativeHandle);
if (cameraGameObjectUUID == 0)
{
return null;
}
GameObject gameObject =
new GameObject(cameraGameObjectUUID);
return gameObject.GetComponent<Camera>();
}
}
public int rendererIndex
{
get =>
InternalCalls
.Rendering_CameraRenderRequestContext_GetRendererIndex(
m_nativeHandle);
set =>
InternalCalls
.Rendering_CameraRenderRequestContext_SetRendererIndex(
m_nativeHandle,
value);
}
internal ulong nativeHandle =>
m_nativeHandle;
}

View File

@@ -15,6 +15,11 @@ namespace XCEngine.Rendering
(CameraFrameStage)InternalCalls.Rendering_ScriptableRenderContext_GetStage(
m_nativeHandle);
public int rendererIndex =>
InternalCalls
.Rendering_ScriptableRenderContext_GetRendererIndex(
m_nativeHandle);
public RenderGraphTextureHandle sourceColorTexture =>
RenderGraphTextureHandle.FromNativeIndex(
InternalCalls

View File

@@ -12,6 +12,11 @@ namespace XCEngine.Rendering
m_nativeHandle = nativeHandle;
}
public int rendererIndex =>
InternalCalls
.Rendering_ScriptableRenderPipelinePlanningContext_GetRendererIndex(
m_nativeHandle);
public bool IsStageRequested(
CameraFrameStage stage)
{