refactor(srp): move final color policy into request seam

This commit is contained in:
2026-04-21 22:34:40 +08:00
parent 808335126f
commit d75bd95e89
13 changed files with 380 additions and 136 deletions

View File

@@ -1,3 +1,5 @@
using XCEngine.Rendering;
namespace XCEngine
{
public sealed class Camera : Component
@@ -166,5 +168,23 @@ namespace XCEngine
public Color skyboxBottomColor =>
SkyboxBottomColor;
public bool HasFinalColorOverrides =>
InternalCalls
.Camera_GetHasFinalColorOverrides(
GameObjectUUID);
public bool hasFinalColorOverrides =>
HasFinalColorOverrides;
public FinalColorOverrideSettings
GetFinalColorOverrideSettings()
{
InternalCalls
.Camera_GetFinalColorOverrideSettings(
GameObjectUUID,
out FinalColorOverrideSettings value);
return value;
}
}
}

View File

@@ -282,6 +282,14 @@ namespace XCEngine
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void Camera_GetSkyboxBottomColor(ulong gameObjectUUID, out Color value);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern bool Camera_GetHasFinalColorOverrides(ulong gameObjectUUID);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void Camera_GetFinalColorOverrideSettings(
ulong gameObjectUUID,
out Rendering.FinalColorOverrideSettings settings);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern float Light_GetIntensity(ulong gameObjectUUID);
@@ -944,6 +952,19 @@ namespace XCEngine
ulong nativeHandle,
int clearFlags);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void
Rendering_CameraRenderRequestContext_SetResolvedFinalColorPolicy(
ulong nativeHandle,
ref Rendering.FinalColorSettings settings,
bool hasPipelineDefaults,
bool hasCameraOverrides);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void
Rendering_CameraRenderRequestContext_ClearFinalColorPolicy(
ulong nativeHandle);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern int
Rendering_RenderSceneSetupContext_GetRendererIndex(

View File

@@ -98,6 +98,26 @@ namespace XCEngine.Rendering
(int)value);
}
public void SetResolvedFinalColorPolicy(
FinalColorSettings settings,
bool hasPipelineDefaults,
bool hasCameraOverrides)
{
InternalCalls
.Rendering_CameraRenderRequestContext_SetResolvedFinalColorPolicy(
m_nativeHandle,
ref settings,
hasPipelineDefaults,
hasCameraOverrides);
}
public void ClearFinalColorPolicy()
{
InternalCalls
.Rendering_CameraRenderRequestContext_ClearFinalColorPolicy(
m_nativeHandle);
}
internal ulong nativeHandle =>
m_nativeHandle;
}

View File

@@ -0,0 +1,76 @@
using System.Runtime.InteropServices;
using XCEngine;
namespace XCEngine.Rendering
{
[StructLayout(LayoutKind.Sequential)]
public struct FinalColorOverrideSettings
{
[MarshalAs(UnmanagedType.I1)]
public bool overrideOutputTransferMode;
public FinalColorOutputTransferMode outputTransferMode;
[MarshalAs(UnmanagedType.I1)]
public bool overrideExposureMode;
public FinalColorExposureMode exposureMode;
[MarshalAs(UnmanagedType.I1)]
public bool overrideExposureValue;
public float exposureValue;
[MarshalAs(UnmanagedType.I1)]
public bool overrideToneMappingMode;
public FinalColorToneMappingMode toneMappingMode;
[MarshalAs(UnmanagedType.I1)]
public bool overrideFinalColorScale;
public Vector4 finalColorScale;
public bool HasOverrides()
{
return overrideOutputTransferMode ||
overrideExposureMode ||
overrideExposureValue ||
overrideToneMappingMode ||
overrideFinalColorScale;
}
public void ApplyTo(ref FinalColorSettings settings)
{
if (overrideOutputTransferMode)
{
settings.outputTransferMode =
outputTransferMode;
}
if (overrideExposureMode)
{
settings.exposureMode =
exposureMode;
}
if (overrideExposureValue)
{
settings.exposureValue =
exposureValue;
}
if (overrideToneMappingMode)
{
settings.toneMappingMode =
toneMappingMode;
}
if (overrideFinalColorScale)
{
settings.finalColorScale =
finalColorScale;
}
}
}
}

View File

@@ -72,17 +72,6 @@ namespace XCEngine.Rendering
return FinalColorSettings.CreateDefault();
}
private protected virtual bool UsesNativeCameraFramePlanBaseline()
{
return false;
}
private protected virtual bool UsesNativeCameraFramePlanBaselineContextual(
int rendererIndex)
{
return UsesNativeCameraFramePlanBaseline();
}
protected virtual void ReleaseRuntimeResources()
{
}