feat(srp): add managed camera frame planning seam
Expose native camera frame planning controls to managed pipeline assets and renderer features. Allow managed planning to override fullscreen stage heuristics while keeping CameraFramePlan as the native execution contract. Add scripting coverage, probe assets, and archive the phase plan after build, test, and editor smoke validation.
This commit is contained in:
@@ -389,6 +389,38 @@ namespace XCEngine
|
||||
internal static extern int Rendering_ScriptableRenderContext_GetStage(
|
||||
ulong nativeHandle);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern bool
|
||||
Rendering_ScriptableRenderPipelinePlanningContext_IsStageRequested(
|
||||
ulong nativeHandle,
|
||||
int stage);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern int
|
||||
Rendering_ScriptableRenderPipelinePlanningContext_GetStageColorSource(
|
||||
ulong nativeHandle,
|
||||
int stage);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern bool
|
||||
Rendering_ScriptableRenderPipelinePlanningContext_GetStageUsesGraphManagedOutputColor(
|
||||
ulong nativeHandle,
|
||||
int stage);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern bool
|
||||
Rendering_ScriptableRenderPipelinePlanningContext_RequestFullscreenStage(
|
||||
ulong nativeHandle,
|
||||
int stage,
|
||||
int source,
|
||||
bool usesGraphManagedOutputColor);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern void
|
||||
Rendering_ScriptableRenderPipelinePlanningContext_ClearFullscreenStage(
|
||||
ulong nativeHandle,
|
||||
int stage);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern int
|
||||
Rendering_ScriptableRenderContext_GetStageColorSource(
|
||||
|
||||
@@ -13,6 +13,12 @@ namespace XCEngine.Rendering
|
||||
ReleaseRuntimeResources();
|
||||
}
|
||||
|
||||
internal void ConfigureCameraFramePlanInstance(
|
||||
ScriptableRenderPipelinePlanningContext context)
|
||||
{
|
||||
ConfigureCameraFramePlan(context);
|
||||
}
|
||||
|
||||
protected virtual ScriptableRenderPipeline CreatePipeline()
|
||||
{
|
||||
return null;
|
||||
@@ -23,6 +29,11 @@ namespace XCEngine.Rendering
|
||||
{
|
||||
}
|
||||
|
||||
protected virtual void ConfigureCameraFramePlan(
|
||||
ScriptableRenderPipelinePlanningContext context)
|
||||
{
|
||||
}
|
||||
|
||||
protected virtual FinalColorSettings GetDefaultFinalColorSettings()
|
||||
{
|
||||
return FinalColorSettings.CreateDefault();
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public sealed class ScriptableRenderPipelinePlanningContext
|
||||
{
|
||||
private readonly ulong m_nativeHandle;
|
||||
|
||||
internal ScriptableRenderPipelinePlanningContext(
|
||||
ulong nativeHandle)
|
||||
{
|
||||
m_nativeHandle = nativeHandle;
|
||||
}
|
||||
|
||||
public bool IsStageRequested(
|
||||
CameraFrameStage stage)
|
||||
{
|
||||
return InternalCalls
|
||||
.Rendering_ScriptableRenderPipelinePlanningContext_IsStageRequested(
|
||||
m_nativeHandle,
|
||||
(int)stage);
|
||||
}
|
||||
|
||||
public CameraFrameColorSource GetStageColorSource(
|
||||
CameraFrameStage stage)
|
||||
{
|
||||
return (CameraFrameColorSource)InternalCalls
|
||||
.Rendering_ScriptableRenderPipelinePlanningContext_GetStageColorSource(
|
||||
m_nativeHandle,
|
||||
(int)stage);
|
||||
}
|
||||
|
||||
public bool UsesGraphManagedOutputColor(
|
||||
CameraFrameStage stage)
|
||||
{
|
||||
return InternalCalls
|
||||
.Rendering_ScriptableRenderPipelinePlanningContext_GetStageUsesGraphManagedOutputColor(
|
||||
m_nativeHandle,
|
||||
(int)stage);
|
||||
}
|
||||
|
||||
public bool RequestFullscreenStage(
|
||||
CameraFrameStage stage,
|
||||
CameraFrameColorSource source,
|
||||
bool usesGraphManagedOutputColor = false)
|
||||
{
|
||||
return InternalCalls
|
||||
.Rendering_ScriptableRenderPipelinePlanningContext_RequestFullscreenStage(
|
||||
m_nativeHandle,
|
||||
(int)stage,
|
||||
(int)source,
|
||||
usesGraphManagedOutputColor);
|
||||
}
|
||||
|
||||
public void ClearFullscreenStage(
|
||||
CameraFrameStage stage)
|
||||
{
|
||||
InternalCalls
|
||||
.Rendering_ScriptableRenderPipelinePlanningContext_ClearFullscreenStage(
|
||||
m_nativeHandle,
|
||||
(int)stage);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -89,6 +89,28 @@ namespace XCEngine.Rendering.Universal
|
||||
}
|
||||
}
|
||||
|
||||
internal void ConfigureCameraFramePlanInstance(
|
||||
ScriptableRenderPipelinePlanningContext context)
|
||||
{
|
||||
ConfigureCameraFramePlan(context);
|
||||
|
||||
ScriptableRendererFeature[] rendererFeatures =
|
||||
GetRendererFeatures();
|
||||
for (int i = 0; i < rendererFeatures.Length; ++i)
|
||||
{
|
||||
ScriptableRendererFeature rendererFeature =
|
||||
rendererFeatures[i];
|
||||
if (rendererFeature == null ||
|
||||
!rendererFeature.isActive)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
rendererFeature.ConfigureCameraFramePlan(
|
||||
context);
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual ScriptableRenderer CreateRenderer()
|
||||
{
|
||||
return null;
|
||||
@@ -99,6 +121,11 @@ namespace XCEngine.Rendering.Universal
|
||||
{
|
||||
}
|
||||
|
||||
protected virtual void ConfigureCameraFramePlan(
|
||||
ScriptableRenderPipelinePlanningContext context)
|
||||
{
|
||||
}
|
||||
|
||||
protected virtual string GetPipelineRendererAssetKey()
|
||||
{
|
||||
return string.Empty;
|
||||
|
||||
@@ -33,6 +33,11 @@ namespace XCEngine.Rendering.Universal
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void ConfigureCameraFramePlan(
|
||||
ScriptableRenderPipelinePlanningContext context)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void AddRenderPasses(
|
||||
ScriptableRenderer renderer,
|
||||
RenderingData renderingData)
|
||||
|
||||
@@ -32,6 +32,18 @@ namespace XCEngine.Rendering.Universal
|
||||
}
|
||||
}
|
||||
|
||||
protected override void ConfigureCameraFramePlan(
|
||||
ScriptableRenderPipelinePlanningContext context)
|
||||
{
|
||||
ScriptableRendererData resolvedRendererData =
|
||||
GetDefaultRendererData();
|
||||
if (resolvedRendererData != null)
|
||||
{
|
||||
resolvedRendererData.ConfigureCameraFramePlanInstance(
|
||||
context);
|
||||
}
|
||||
}
|
||||
|
||||
protected override string GetPipelineRendererAssetKey()
|
||||
{
|
||||
ScriptableRendererData resolvedRendererData =
|
||||
|
||||
Reference in New Issue
Block a user