From f4d4112e2fe3193ffb40e2ef20927d871c86b77b Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Sun, 19 Apr 2026 14:19:57 +0800 Subject: [PATCH] refactor(srp): move rendering data ownership into universal package --- managed/CMakeLists.txt | 22 +- .../Rendering/Core/ScriptableRenderContext.cs | 273 +--------------- .../{Data => Universal}/CameraData.cs | 2 +- .../DirectionalLightData.cs | 2 +- .../DirectionalShadowData.cs | 2 +- .../{Data => Universal}/EnvironmentData.cs | 2 +- .../{Data => Universal}/FinalColorData.cs | 2 +- .../{Data => Universal}/LightingData.cs | 2 +- .../{Data => Universal}/RenderClearFlags.cs | 2 +- .../RenderEnvironmentMode.cs | 2 +- .../Rendering/Universal/RenderingData.cs | 12 +- .../Universal/RenderingDataResolver.cs | 296 ++++++++++++++++++ .../{Data => Universal}/ShadowData.cs | 2 +- .../{Data => Universal}/StageColorData.cs | 2 +- 14 files changed, 325 insertions(+), 298 deletions(-) rename managed/XCEngine.ScriptCore/Rendering/{Data => Universal}/CameraData.cs (98%) rename managed/XCEngine.ScriptCore/Rendering/{Data => Universal}/DirectionalLightData.cs (96%) rename managed/XCEngine.ScriptCore/Rendering/{Data => Universal}/DirectionalShadowData.cs (98%) rename managed/XCEngine.ScriptCore/Rendering/{Data => Universal}/EnvironmentData.cs (96%) rename managed/XCEngine.ScriptCore/Rendering/{Data => Universal}/FinalColorData.cs (97%) rename managed/XCEngine.ScriptCore/Rendering/{Data => Universal}/LightingData.cs (96%) rename managed/XCEngine.ScriptCore/Rendering/{Data => Universal}/RenderClearFlags.cs (82%) rename managed/XCEngine.ScriptCore/Rendering/{Data => Universal}/RenderEnvironmentMode.cs (79%) create mode 100644 managed/XCEngine.ScriptCore/Rendering/Universal/RenderingDataResolver.cs rename managed/XCEngine.ScriptCore/Rendering/{Data => Universal}/ShadowData.cs (93%) rename managed/XCEngine.ScriptCore/Rendering/{Data => Universal}/StageColorData.cs (94%) diff --git a/managed/CMakeLists.txt b/managed/CMakeLists.txt index 2c4d737f..6f082539 100644 --- a/managed/CMakeLists.txt +++ b/managed/CMakeLists.txt @@ -183,32 +183,32 @@ set(XCENGINE_SCRIPT_CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderPipeline.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderPipelineAsset.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderPipelineCameraRequestContext.cs - # Rendering shared data - ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/CameraData.cs - ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/DirectionalLightData.cs - ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/DirectionalShadowData.cs - ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/EnvironmentData.cs - ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/FinalColorData.cs - ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/LightingData.cs - ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/RenderClearFlags.cs - ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/RenderEnvironmentMode.cs - ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/ShadowData.cs - ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/StageColorData.cs ) set(XCENGINE_RENDER_PIPELINES_UNIVERSAL_SOURCES # Universal renderer package + ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/CameraData.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/ColorScalePostProcessRendererFeature.cs + ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/DirectionalLightData.cs + ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/DirectionalShadowData.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/DisableDirectionalShadowRendererFeature.cs + ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/EnvironmentData.cs + ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/FinalColorData.cs + ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/LightingData.cs + ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RenderClearFlags.cs + ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RenderEnvironmentMode.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RendererBackedRenderPipeline.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RendererBackedRenderPipelineAsset.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RendererDrivenRenderPipeline.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RenderPassEvent.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RenderingData.cs + ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RenderingDataResolver.cs + ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/ShadowData.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/ScriptableRenderPass.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/ScriptableRenderer.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/ScriptableRendererData.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/ScriptableRendererFeature.cs + ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/StageColorData.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/UniversalRenderer.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/UniversalRendererData.cs ${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/UniversalRenderPipelineAsset.cs diff --git a/managed/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderContext.cs b/managed/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderContext.cs index ae94b0b3..865af9c7 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderContext.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderContext.cs @@ -29,12 +29,6 @@ namespace XCEngine.Rendering } private readonly ulong m_nativeHandle; - private CameraData m_cameraData; - private LightingData m_lightingData; - private ShadowData m_shadowData; - private EnvironmentData m_environmentData; - private FinalColorData m_finalColorData; - private StageColorData m_stageColorData; internal ScriptableRenderContext(ulong nativeHandle) { @@ -45,26 +39,8 @@ namespace XCEngine.Rendering (CameraFrameStage)InternalCalls.Rendering_ScriptableRenderContext_GetStage( m_nativeHandle); - internal CameraData cameraData => - m_cameraData ?? (m_cameraData = ResolveCameraData()); - - internal LightingData lightingData => - m_lightingData ?? (m_lightingData = ResolveLightingData()); - - internal ShadowData shadowData => - m_shadowData ?? (m_shadowData = ResolveShadowData()); - - internal EnvironmentData environmentData => - m_environmentData ?? - (m_environmentData = ResolveEnvironmentData()); - - internal FinalColorData finalColorData => - m_finalColorData ?? - (m_finalColorData = ResolveFinalColorData()); - - internal StageColorData stageColorData => - m_stageColorData ?? - (m_stageColorData = ResolveStageColorData()); + internal ulong nativeHandle => + m_nativeHandle; public bool RecordScene() { @@ -189,251 +165,6 @@ namespace XCEngine.Rendering ref vectorPayload); } - private CameraData ResolveCameraData() - { - Matrix4x4 view; - Matrix4x4 projection; - Matrix4x4 viewProjection; - Vector3 worldPosition; - Vector3 worldRight; - Vector3 worldUp; - Vector3 worldForward; - Color clearColor; - - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraView( - m_nativeHandle, - out view); - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraProjection( - m_nativeHandle, - out projection); - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraViewProjection( - m_nativeHandle, - out viewProjection); - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraWorldPosition( - m_nativeHandle, - out worldPosition); - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraWorldRight( - m_nativeHandle, - out worldRight); - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraWorldUp( - m_nativeHandle, - out worldUp); - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraWorldForward( - m_nativeHandle, - out worldForward); - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraClearColor( - m_nativeHandle, - out clearColor); - - return new CameraData( - view, - projection, - viewProjection, - worldPosition, - worldRight, - worldUp, - worldForward, - clearColor, - (RenderClearFlags)InternalCalls - .Rendering_ScriptableRenderContext_GetCameraClearFlags( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraPerspectiveProjection( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraVerticalFovRadians( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraOrthographicSize( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraAspectRatio( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraNearClipPlane( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraFarClipPlane( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraViewportWidth( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetCameraViewportHeight( - m_nativeHandle)); - } - - private LightingData ResolveLightingData() - { - Vector3 mainDirectionalLightDirection; - Color mainDirectionalLightColor; - - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalLightDirection( - m_nativeHandle, - out mainDirectionalLightDirection); - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalLightColor( - m_nativeHandle, - out mainDirectionalLightColor); - - return new LightingData( - new DirectionalLightData( - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalLightEnabled( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalLightCastsShadows( - m_nativeHandle), - mainDirectionalLightDirection, - mainDirectionalLightColor, - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalLightIntensity( - m_nativeHandle)), - InternalCalls - .Rendering_ScriptableRenderContext_GetHasMainDirectionalShadow( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetAdditionalLightCount( - m_nativeHandle)); - } - - private EnvironmentData ResolveEnvironmentData() - { - Color skyboxTopColor; - Color skyboxHorizonColor; - Color skyboxBottomColor; - - InternalCalls - .Rendering_ScriptableRenderContext_GetEnvironmentSkyboxTopColor( - m_nativeHandle, - out skyboxTopColor); - InternalCalls - .Rendering_ScriptableRenderContext_GetEnvironmentSkyboxHorizonColor( - m_nativeHandle, - out skyboxHorizonColor); - InternalCalls - .Rendering_ScriptableRenderContext_GetEnvironmentSkyboxBottomColor( - m_nativeHandle, - out skyboxBottomColor); - - return new EnvironmentData( - (RenderEnvironmentMode)InternalCalls - .Rendering_ScriptableRenderContext_GetEnvironmentMode( - m_nativeHandle), - skyboxTopColor, - skyboxHorizonColor, - skyboxBottomColor); - } - - private ShadowData ResolveShadowData() - { - Matrix4x4 viewProjection; - - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalShadowViewProjection( - m_nativeHandle, - out viewProjection); - - return new ShadowData( - new DirectionalShadowData( - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalShadowEnabled( - m_nativeHandle), - viewProjection, - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalShadowOrthographicHalfExtent( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalShadowNearClipPlane( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalShadowFarClipPlane( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalShadowMapWidth( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalShadowMapHeight( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalShadowWorldTexelSize( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalShadowReceiverDepthBias( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalShadowNormalBiasScale( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalShadowStrength( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalShadowDepthBiasFactor( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetMainDirectionalShadowDepthBiasUnits( - m_nativeHandle))); - } - - private FinalColorData ResolveFinalColorData() - { - Vector4 finalColorScale; - - InternalCalls - .Rendering_ScriptableRenderContext_GetFinalColorScale( - m_nativeHandle, - out finalColorScale); - - FinalColorSettings settings = - FinalColorSettings.CreateDefault(); - settings.outputTransferMode = - (FinalColorOutputTransferMode)InternalCalls - .Rendering_ScriptableRenderContext_GetFinalColorOutputTransferMode( - m_nativeHandle); - settings.exposureMode = - (FinalColorExposureMode)InternalCalls - .Rendering_ScriptableRenderContext_GetFinalColorExposureMode( - m_nativeHandle); - settings.exposureValue = - InternalCalls - .Rendering_ScriptableRenderContext_GetFinalColorExposureValue( - m_nativeHandle); - settings.toneMappingMode = - (FinalColorToneMappingMode)InternalCalls - .Rendering_ScriptableRenderContext_GetFinalColorToneMappingMode( - m_nativeHandle); - settings.finalColorScale = - finalColorScale; - - return new FinalColorData( - settings, - InternalCalls - .Rendering_ScriptableRenderContext_GetFinalColorHasPipelineDefaults( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetFinalColorHasCameraOverrides( - m_nativeHandle)); - } - - private StageColorData ResolveStageColorData() - { - return new StageColorData( - (CameraFrameColorSource)InternalCalls - .Rendering_ScriptableRenderContext_GetStageColorSource( - m_nativeHandle), - InternalCalls - .Rendering_ScriptableRenderContext_GetStageUsesGraphManagedOutputColor( - m_nativeHandle)); - } } } diff --git a/managed/XCEngine.ScriptCore/Rendering/Data/CameraData.cs b/managed/XCEngine.ScriptCore/Rendering/Universal/CameraData.cs similarity index 98% rename from managed/XCEngine.ScriptCore/Rendering/Data/CameraData.cs rename to managed/XCEngine.ScriptCore/Rendering/Universal/CameraData.cs index 2e996e3b..03080d5b 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Data/CameraData.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Universal/CameraData.cs @@ -1,6 +1,6 @@ using XCEngine; -namespace XCEngine.Rendering +namespace XCEngine.Rendering.Universal { public sealed class CameraData { diff --git a/managed/XCEngine.ScriptCore/Rendering/Data/DirectionalLightData.cs b/managed/XCEngine.ScriptCore/Rendering/Universal/DirectionalLightData.cs similarity index 96% rename from managed/XCEngine.ScriptCore/Rendering/Data/DirectionalLightData.cs rename to managed/XCEngine.ScriptCore/Rendering/Universal/DirectionalLightData.cs index 3e748483..b0f3e758 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Data/DirectionalLightData.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Universal/DirectionalLightData.cs @@ -1,6 +1,6 @@ using XCEngine; -namespace XCEngine.Rendering +namespace XCEngine.Rendering.Universal { public sealed class DirectionalLightData { diff --git a/managed/XCEngine.ScriptCore/Rendering/Data/DirectionalShadowData.cs b/managed/XCEngine.ScriptCore/Rendering/Universal/DirectionalShadowData.cs similarity index 98% rename from managed/XCEngine.ScriptCore/Rendering/Data/DirectionalShadowData.cs rename to managed/XCEngine.ScriptCore/Rendering/Universal/DirectionalShadowData.cs index 0ffdaf53..5288b67d 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Data/DirectionalShadowData.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Universal/DirectionalShadowData.cs @@ -1,6 +1,6 @@ using XCEngine; -namespace XCEngine.Rendering +namespace XCEngine.Rendering.Universal { public sealed class DirectionalShadowData { diff --git a/managed/XCEngine.ScriptCore/Rendering/Data/EnvironmentData.cs b/managed/XCEngine.ScriptCore/Rendering/Universal/EnvironmentData.cs similarity index 96% rename from managed/XCEngine.ScriptCore/Rendering/Data/EnvironmentData.cs rename to managed/XCEngine.ScriptCore/Rendering/Universal/EnvironmentData.cs index 97d8689e..20425621 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Data/EnvironmentData.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Universal/EnvironmentData.cs @@ -1,6 +1,6 @@ using XCEngine; -namespace XCEngine.Rendering +namespace XCEngine.Rendering.Universal { public sealed class EnvironmentData { diff --git a/managed/XCEngine.ScriptCore/Rendering/Data/FinalColorData.cs b/managed/XCEngine.ScriptCore/Rendering/Universal/FinalColorData.cs similarity index 97% rename from managed/XCEngine.ScriptCore/Rendering/Data/FinalColorData.cs rename to managed/XCEngine.ScriptCore/Rendering/Universal/FinalColorData.cs index ceba96f4..43772885 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Data/FinalColorData.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Universal/FinalColorData.cs @@ -1,6 +1,6 @@ using XCEngine; -namespace XCEngine.Rendering +namespace XCEngine.Rendering.Universal { public sealed class FinalColorData { diff --git a/managed/XCEngine.ScriptCore/Rendering/Data/LightingData.cs b/managed/XCEngine.ScriptCore/Rendering/Universal/LightingData.cs similarity index 96% rename from managed/XCEngine.ScriptCore/Rendering/Data/LightingData.cs rename to managed/XCEngine.ScriptCore/Rendering/Universal/LightingData.cs index f9af2d24..eb013c41 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Data/LightingData.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Universal/LightingData.cs @@ -1,6 +1,6 @@ using XCEngine; -namespace XCEngine.Rendering +namespace XCEngine.Rendering.Universal { public sealed class LightingData { diff --git a/managed/XCEngine.ScriptCore/Rendering/Data/RenderClearFlags.cs b/managed/XCEngine.ScriptCore/Rendering/Universal/RenderClearFlags.cs similarity index 82% rename from managed/XCEngine.ScriptCore/Rendering/Data/RenderClearFlags.cs rename to managed/XCEngine.ScriptCore/Rendering/Universal/RenderClearFlags.cs index d31dcd53..951edaa6 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Data/RenderClearFlags.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Universal/RenderClearFlags.cs @@ -1,7 +1,7 @@ using System; using XCEngine; -namespace XCEngine.Rendering +namespace XCEngine.Rendering.Universal { [Flags] public enum RenderClearFlags diff --git a/managed/XCEngine.ScriptCore/Rendering/Data/RenderEnvironmentMode.cs b/managed/XCEngine.ScriptCore/Rendering/Universal/RenderEnvironmentMode.cs similarity index 79% rename from managed/XCEngine.ScriptCore/Rendering/Data/RenderEnvironmentMode.cs rename to managed/XCEngine.ScriptCore/Rendering/Universal/RenderEnvironmentMode.cs index 74df62ff..9d960e31 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Data/RenderEnvironmentMode.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Universal/RenderEnvironmentMode.cs @@ -1,6 +1,6 @@ using XCEngine; -namespace XCEngine.Rendering +namespace XCEngine.Rendering.Universal { public enum RenderEnvironmentMode { diff --git a/managed/XCEngine.ScriptCore/Rendering/Universal/RenderingData.cs b/managed/XCEngine.ScriptCore/Rendering/Universal/RenderingData.cs index 01e9ac6a..c0453e7d 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Universal/RenderingData.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Universal/RenderingData.cs @@ -23,22 +23,22 @@ namespace XCEngine.Rendering.Universal ? context.stage : CameraFrameStage.MainScene, context != null - ? context.cameraData + ? RenderingDataResolver.ResolveCameraData(context) : CameraData.Default, context != null - ? context.lightingData + ? RenderingDataResolver.ResolveLightingData(context) : LightingData.Default, context != null - ? context.shadowData + ? RenderingDataResolver.ResolveShadowData(context) : ShadowData.Default, context != null - ? context.environmentData + ? RenderingDataResolver.ResolveEnvironmentData(context) : EnvironmentData.Default, context != null - ? context.finalColorData + ? RenderingDataResolver.ResolveFinalColorData(context) : FinalColorData.Default, context != null - ? context.stageColorData + ? RenderingDataResolver.ResolveStageColorData(context) : StageColorData.Default) { } diff --git a/managed/XCEngine.ScriptCore/Rendering/Universal/RenderingDataResolver.cs b/managed/XCEngine.ScriptCore/Rendering/Universal/RenderingDataResolver.cs new file mode 100644 index 00000000..6fbe104e --- /dev/null +++ b/managed/XCEngine.ScriptCore/Rendering/Universal/RenderingDataResolver.cs @@ -0,0 +1,296 @@ +using XCEngine; +using XCEngine.Rendering; + +namespace XCEngine.Rendering.Universal +{ + internal static class RenderingDataResolver + { + public static CameraData ResolveCameraData( + ScriptableRenderContext context) + { + if (context == null) + { + return CameraData.Default; + } + + ulong nativeHandle = context.nativeHandle; + Matrix4x4 view; + Matrix4x4 projection; + Matrix4x4 viewProjection; + Vector3 worldPosition; + Vector3 worldRight; + Vector3 worldUp; + Vector3 worldForward; + Color clearColor; + + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraView( + nativeHandle, + out view); + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraProjection( + nativeHandle, + out projection); + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraViewProjection( + nativeHandle, + out viewProjection); + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraWorldPosition( + nativeHandle, + out worldPosition); + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraWorldRight( + nativeHandle, + out worldRight); + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraWorldUp( + nativeHandle, + out worldUp); + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraWorldForward( + nativeHandle, + out worldForward); + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraClearColor( + nativeHandle, + out clearColor); + + return new CameraData( + view, + projection, + viewProjection, + worldPosition, + worldRight, + worldUp, + worldForward, + clearColor, + (RenderClearFlags)InternalCalls + .Rendering_ScriptableRenderContext_GetCameraClearFlags( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraPerspectiveProjection( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraVerticalFovRadians( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraOrthographicSize( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraAspectRatio( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraNearClipPlane( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraFarClipPlane( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraViewportWidth( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetCameraViewportHeight( + nativeHandle)); + } + + public static LightingData ResolveLightingData( + ScriptableRenderContext context) + { + if (context == null) + { + return LightingData.Default; + } + + ulong nativeHandle = context.nativeHandle; + Vector3 mainDirectionalLightDirection; + Color mainDirectionalLightColor; + + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalLightDirection( + nativeHandle, + out mainDirectionalLightDirection); + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalLightColor( + nativeHandle, + out mainDirectionalLightColor); + + return new LightingData( + new DirectionalLightData( + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalLightEnabled( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalLightCastsShadows( + nativeHandle), + mainDirectionalLightDirection, + mainDirectionalLightColor, + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalLightIntensity( + nativeHandle)), + InternalCalls + .Rendering_ScriptableRenderContext_GetHasMainDirectionalShadow( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetAdditionalLightCount( + nativeHandle)); + } + + public static ShadowData ResolveShadowData( + ScriptableRenderContext context) + { + if (context == null) + { + return ShadowData.Default; + } + + ulong nativeHandle = context.nativeHandle; + Matrix4x4 viewProjection; + + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalShadowViewProjection( + nativeHandle, + out viewProjection); + + return new ShadowData( + new DirectionalShadowData( + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalShadowEnabled( + nativeHandle), + viewProjection, + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalShadowOrthographicHalfExtent( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalShadowNearClipPlane( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalShadowFarClipPlane( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalShadowMapWidth( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalShadowMapHeight( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalShadowWorldTexelSize( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalShadowReceiverDepthBias( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalShadowNormalBiasScale( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalShadowStrength( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalShadowDepthBiasFactor( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetMainDirectionalShadowDepthBiasUnits( + nativeHandle))); + } + + public static EnvironmentData ResolveEnvironmentData( + ScriptableRenderContext context) + { + if (context == null) + { + return EnvironmentData.Default; + } + + ulong nativeHandle = context.nativeHandle; + Color skyboxTopColor; + Color skyboxHorizonColor; + Color skyboxBottomColor; + + InternalCalls + .Rendering_ScriptableRenderContext_GetEnvironmentSkyboxTopColor( + nativeHandle, + out skyboxTopColor); + InternalCalls + .Rendering_ScriptableRenderContext_GetEnvironmentSkyboxHorizonColor( + nativeHandle, + out skyboxHorizonColor); + InternalCalls + .Rendering_ScriptableRenderContext_GetEnvironmentSkyboxBottomColor( + nativeHandle, + out skyboxBottomColor); + + return new EnvironmentData( + (RenderEnvironmentMode)InternalCalls + .Rendering_ScriptableRenderContext_GetEnvironmentMode( + nativeHandle), + skyboxTopColor, + skyboxHorizonColor, + skyboxBottomColor); + } + + public static FinalColorData ResolveFinalColorData( + ScriptableRenderContext context) + { + if (context == null) + { + return FinalColorData.Default; + } + + ulong nativeHandle = context.nativeHandle; + Vector4 finalColorScale; + + InternalCalls + .Rendering_ScriptableRenderContext_GetFinalColorScale( + nativeHandle, + out finalColorScale); + + FinalColorSettings settings = + FinalColorSettings.CreateDefault(); + settings.outputTransferMode = + (FinalColorOutputTransferMode)InternalCalls + .Rendering_ScriptableRenderContext_GetFinalColorOutputTransferMode( + nativeHandle); + settings.exposureMode = + (FinalColorExposureMode)InternalCalls + .Rendering_ScriptableRenderContext_GetFinalColorExposureMode( + nativeHandle); + settings.exposureValue = + InternalCalls + .Rendering_ScriptableRenderContext_GetFinalColorExposureValue( + nativeHandle); + settings.toneMappingMode = + (FinalColorToneMappingMode)InternalCalls + .Rendering_ScriptableRenderContext_GetFinalColorToneMappingMode( + nativeHandle); + settings.finalColorScale = + finalColorScale; + + return new FinalColorData( + settings, + InternalCalls + .Rendering_ScriptableRenderContext_GetFinalColorHasPipelineDefaults( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetFinalColorHasCameraOverrides( + nativeHandle)); + } + + public static StageColorData ResolveStageColorData( + ScriptableRenderContext context) + { + if (context == null) + { + return StageColorData.Default; + } + + ulong nativeHandle = context.nativeHandle; + return new StageColorData( + (CameraFrameColorSource)InternalCalls + .Rendering_ScriptableRenderContext_GetStageColorSource( + nativeHandle), + InternalCalls + .Rendering_ScriptableRenderContext_GetStageUsesGraphManagedOutputColor( + nativeHandle)); + } + } +} diff --git a/managed/XCEngine.ScriptCore/Rendering/Data/ShadowData.cs b/managed/XCEngine.ScriptCore/Rendering/Universal/ShadowData.cs similarity index 93% rename from managed/XCEngine.ScriptCore/Rendering/Data/ShadowData.cs rename to managed/XCEngine.ScriptCore/Rendering/Universal/ShadowData.cs index 9d30a0af..13d6c86e 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Data/ShadowData.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Universal/ShadowData.cs @@ -1,6 +1,6 @@ using XCEngine; -namespace XCEngine.Rendering +namespace XCEngine.Rendering.Universal { public sealed class ShadowData { diff --git a/managed/XCEngine.ScriptCore/Rendering/Data/StageColorData.cs b/managed/XCEngine.ScriptCore/Rendering/Universal/StageColorData.cs similarity index 94% rename from managed/XCEngine.ScriptCore/Rendering/Data/StageColorData.cs rename to managed/XCEngine.ScriptCore/Rendering/Universal/StageColorData.cs index bd032882..4607b838 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Data/StageColorData.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Universal/StageColorData.cs @@ -1,6 +1,6 @@ using XCEngine; -namespace XCEngine.Rendering +namespace XCEngine.Rendering.Universal { public sealed class StageColorData {