From e0c9707aaf302d992cb9ebaa91659fddd56fa241 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Tue, 21 Apr 2026 14:17:10 +0800 Subject: [PATCH] refactor(srp): tighten native seam visibility --- ...ilityTighteningPlan_完成归档_2026-04-21.md | 60 +++++++++++++++++++ .../RendererBackedRenderPipelineAsset.cs | 16 ++--- .../Universal/ScriptableRendererData.cs | 6 +- .../Universal/UniversalRenderPipelineAsset.cs | 2 +- .../Universal/UniversalRendererData.cs | 6 +- .../Core/ScriptableRenderPipelineAsset.cs | 4 +- 6 files changed, 77 insertions(+), 17 deletions(-) create mode 100644 docs/used/SRP_NativeSeamVisibilityTighteningPlan_完成归档_2026-04-21.md diff --git a/docs/used/SRP_NativeSeamVisibilityTighteningPlan_完成归档_2026-04-21.md b/docs/used/SRP_NativeSeamVisibilityTighteningPlan_完成归档_2026-04-21.md new file mode 100644 index 00000000..cca0a0ad --- /dev/null +++ b/docs/used/SRP_NativeSeamVisibilityTighteningPlan_完成归档_2026-04-21.md @@ -0,0 +1,60 @@ +# SRP Native Seam Visibility Tightening Plan 2026-04-21 + +## Goal + +Tighten the visibility of the remaining native-binding seams that are still exposed on public SRP/URP managed base types, while preserving the current first-party URP behavior. + +## Why This Stage + +The previous cleanup stages removed or narrowed most generic native key seams, but several native-only hooks are still exposed as normal overridable managed API: + +1. `UsesNativeCameraFramePlanBaseline*` on `ScriptableRenderPipelineAsset` +2. render-scene / standalone-pass / directional-shadow policy hooks on `RendererBackedRenderPipelineAsset` +3. renderer-data-level scene-setup / standalone-pass / directional-shadow execution hooks on `ScriptableRendererData` + +Current repo usage shows these hooks are already first-party only: + +1. `UsesNativeCameraFramePlanBaselineContextual` is only overridden by `RendererBackedRenderPipelineAsset` +2. renderer-backed asset-level native policy fallback is only overridden by `UniversalRenderPipelineAsset` +3. renderer-data-level native policy keys are only overridden by `UniversalRendererData` + +So they should stop looking like public customization points for external C# users. + +## Scope + +Included: + +1. tighten `UsesNativeCameraFramePlanBaseline*` visibility so it is no longer an external customization point; +2. tighten non-pipeline-key native hooks on `RendererBackedRenderPipelineAsset`; +3. tighten renderer-data-level non-pipeline-key native hooks on `ScriptableRendererData`; +4. keep method names and bridge behavior intact so native runtime lookup still works; +5. rebuild `XCEditor` and run old editor smoke. + +Not included: + +1. changing `GetPipelineRendererAssetKey*` visibility on renderer-backed / renderer-data types; +2. replacing native key resolution with a different binding mechanism; +3. Mono bridge method-name refactors; +4. deferred renderer work. + +## Acceptance + +This stage is complete when: + +1. external managed pipelines no longer see non-pipeline-key native seams as normal protected override points; +2. first-party URP types still override the required hooks inside the URP assembly; +3. `XCEditor` builds successfully; +4. old editor smoke passes and `editor.log` contains a fresh `SceneReady`. + +## Validation + +Validated on 2026-04-21: + +1. built old editor target with `cmake --build . --config Debug --target XCEditor` from `build/`; +2. launched `editor/bin/Debug/XCEngine.exe`; +3. let it run for about 12 seconds; +4. verified a fresh `SceneReady` entry in `editor/bin/Debug/editor.log`. + +Observed log line: + +`[2026-04-21 14:16:09] [INFO] [General] [SceneLoadTrace] SceneReady elapsed_ms=5470 first_frame_ms=656 peak_pending_async=9` diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RendererBackedRenderPipelineAsset.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RendererBackedRenderPipelineAsset.cs index 9f75057f..1f9740bf 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RendererBackedRenderPipelineAsset.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/RendererBackedRenderPipelineAsset.cs @@ -88,12 +88,12 @@ namespace XCEngine.Rendering.Universal : string.Empty; } - protected virtual string GetRenderSceneSetupPolicyAssetKey() + private protected virtual string GetRenderSceneSetupPolicyAssetKey() { return string.Empty; } - protected virtual string + private protected virtual string GetRenderSceneSetupPolicyAssetKeyContextual( int rendererIndex) { @@ -113,13 +113,13 @@ namespace XCEngine.Rendering.Universal return GetRenderSceneSetupPolicyAssetKey(); } - protected virtual string GetCameraFrameStandalonePassAssetKey( + private protected virtual string GetCameraFrameStandalonePassAssetKey( CameraFrameStage stage) { return string.Empty; } - protected virtual string + private protected virtual string GetCameraFrameStandalonePassAssetKeyContextual( CameraFrameStage stage, int rendererIndex) @@ -143,19 +143,19 @@ namespace XCEngine.Rendering.Universal stage); } - protected virtual string + private protected virtual string GetDirectionalShadowPlanningPolicyAssetKey() { return string.Empty; } - protected virtual string + private protected virtual string GetDirectionalShadowExecutionPolicyAssetKey() { return string.Empty; } - protected virtual string + private protected virtual string GetDirectionalShadowExecutionPolicyAssetKeyContextual( int rendererIndex) { @@ -232,7 +232,7 @@ namespace XCEngine.Rendering.Universal return true; } - protected override bool UsesNativeCameraFramePlanBaselineContextual( + private protected override bool UsesNativeCameraFramePlanBaselineContextual( int rendererIndex) { return UsesExplicitFullscreenStagePlanning(); diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ScriptableRendererData.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ScriptableRendererData.cs index 0ed5ea9e..1e83f7f1 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ScriptableRendererData.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/ScriptableRendererData.cs @@ -171,18 +171,18 @@ namespace XCEngine.Rendering.Universal return string.Empty; } - protected virtual string GetRenderSceneSetupPolicyAssetKey() + private protected virtual string GetRenderSceneSetupPolicyAssetKey() { return string.Empty; } - protected virtual string GetCameraFrameStandalonePassAssetKey( + private protected virtual string GetCameraFrameStandalonePassAssetKey( CameraFrameStage stage) { return string.Empty; } - protected virtual string + private protected virtual string GetDirectionalShadowExecutionPolicyAssetKey() { return string.Empty; diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderPipelineAsset.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderPipelineAsset.cs index c9e41cf7..fe903d9a 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderPipelineAsset.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderPipelineAsset.cs @@ -23,7 +23,7 @@ namespace XCEngine.Rendering.Universal return new UniversalRenderPipeline(this); } - protected override string + private protected override string GetDirectionalShadowPlanningPolicyAssetKey() { return "BuiltinDirectionalShadowPlanning"; diff --git a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRendererData.cs b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRendererData.cs index 4a329555..c546cc74 100644 --- a/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRendererData.cs +++ b/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRendererData.cs @@ -32,12 +32,12 @@ namespace XCEngine.Rendering.Universal return "BuiltinForward"; } - protected override string GetRenderSceneSetupPolicyAssetKey() + private protected override string GetRenderSceneSetupPolicyAssetKey() { return "BuiltinDefaultSceneSetup"; } - protected override string GetCameraFrameStandalonePassAssetKey( + private protected override string GetCameraFrameStandalonePassAssetKey( CameraFrameStage stage) { switch (stage) @@ -51,7 +51,7 @@ namespace XCEngine.Rendering.Universal } } - protected override string + private protected override string GetDirectionalShadowExecutionPolicyAssetKey() { return "BuiltinDirectionalShadow"; diff --git a/managed/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderPipelineAsset.cs b/managed/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderPipelineAsset.cs index 44491591..a750dea2 100644 --- a/managed/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderPipelineAsset.cs +++ b/managed/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderPipelineAsset.cs @@ -47,12 +47,12 @@ namespace XCEngine.Rendering return FinalColorSettings.CreateDefault(); } - protected virtual bool UsesNativeCameraFramePlanBaseline() + private protected virtual bool UsesNativeCameraFramePlanBaseline() { return false; } - protected virtual bool UsesNativeCameraFramePlanBaselineContextual( + private protected virtual bool UsesNativeCameraFramePlanBaselineContextual( int rendererIndex) { return UsesNativeCameraFramePlanBaseline();