From 16788fec3452f78cce55afb68f2313636e921188 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Mon, 20 Apr 2026 23:02:49 +0800 Subject: [PATCH] feat(srp): add explicit skybox draw primitive - add ScriptableRenderContext.DrawSkybox as a public main-scene draw primitive - route default RecordScene and DrawSkyboxPass recording through explicit draw calls - expose the new DrawSkybox API in the scriptable render context probe --- .../ScriptableRenderContextApiSurfaceProbe.cs | 5 +++++ .../Rendering/Universal/DrawSkyboxPass.cs | 3 +-- .../Rendering/Core/ScriptableRenderContext.cs | 12 +++++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/managed/GameScripts/ScriptableRenderContextApiSurfaceProbe.cs b/managed/GameScripts/ScriptableRenderContextApiSurfaceProbe.cs index dbbd7407..0b665303 100644 --- a/managed/GameScripts/ScriptableRenderContextApiSurfaceProbe.cs +++ b/managed/GameScripts/ScriptableRenderContextApiSurfaceProbe.cs @@ -14,6 +14,7 @@ namespace Gameplay public bool HasPublicContextDrawRenderersByType; public bool HasPublicContextDrawRenderersByDesc; public bool HasPublicContextDrawRenderersByDescAndSettings; + public bool HasPublicContextDrawSkybox; public bool HasPublicContextDrawOpaqueRenderers; public bool HasPublicContextDrawTransparentRenderers; public bool HasPublicContextRecordOpaqueScenePhase; @@ -149,6 +150,10 @@ namespace Gameplay typeof(DrawingSettings) }, null) != null; + HasPublicContextDrawSkybox = + contextType.GetMethod( + "DrawSkybox", + PublicInstanceMethodFlags) != null; HasPublicContextDrawOpaqueRenderers = contextType.GetMethod( "DrawOpaqueRenderers", diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/DrawSkyboxPass.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/DrawSkyboxPass.cs index a4b9ed22..ca8e195f 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/DrawSkyboxPass.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/DrawSkyboxPass.cs @@ -19,8 +19,7 @@ namespace XCEngine.Rendering.Universal return context != null && renderingData != null && renderingData.isMainSceneStage && - context.RecordScenePhase( - SceneRenderPhase.Skybox); + context.DrawSkybox(); } } } diff --git a/managed/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderContext.cs b/managed/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderContext.cs index a1ee8f7b..9d7a9df5 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderContext.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderContext.cs @@ -36,13 +36,13 @@ namespace XCEngine.Rendering public bool RecordScene() { return RecordBeforeOpaqueInjection() && - RecordOpaqueScenePhase() && + DrawOpaqueRenderers() && RecordAfterOpaqueInjection() && RecordBeforeSkyboxInjection() && - RecordSkyboxScenePhase() && + DrawSkybox() && RecordAfterSkyboxInjection() && RecordBeforeTransparentInjection() && - RecordTransparentScenePhase() && + DrawTransparentRenderers() && RecordAfterTransparentInjection(); } @@ -124,6 +124,12 @@ namespace XCEngine.Rendering SceneRenderPhase.Skybox); } + public bool DrawSkybox() + { + return RecordScenePhase( + SceneRenderPhase.Skybox); + } + public bool RecordTransparentScenePhase() { return RecordScenePhase(