feat(scripting): add managed srp base api

This commit is contained in:
2026-04-15 20:14:48 +08:00
parent cafe3c8076
commit 04ecac26d6
6 changed files with 75 additions and 3 deletions

View File

@@ -101,6 +101,7 @@ endforeach()
set(XCENGINE_SCRIPT_CORE_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Behaviour.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Camera.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/CameraFrameStage.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Component.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Debug.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/ForceMode.cs
@@ -119,6 +120,8 @@ set(XCENGINE_SCRIPT_CORE_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Quaternion.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/RaycastHit.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/RenderPipelineAsset.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/ScriptableRenderPipeline.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/ScriptableRenderPipelineAsset.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rigidbody.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/SerializeField.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Space.cs

View File

@@ -2,13 +2,19 @@ using XCEngine;
namespace Gameplay
{
public sealed class RenderPipelineApiProbeAsset : RenderPipelineAsset
public sealed class LegacyRenderPipelineApiProbeAsset : RenderPipelineAsset
{
}
public sealed class RenderPipelineApiProbeAsset : ScriptableRenderPipelineAsset
{
}
public sealed class RenderPipelineApiProbe : MonoBehaviour
{
public bool InitialTypeWasNull;
public bool InvalidSelectionRejected;
public bool InvalidSelectionMentionsScriptableBase;
public bool SelectionRoundTripSucceeded;
public string SelectedPipelineTypeName = string.Empty;
@@ -16,6 +22,19 @@ namespace Gameplay
{
InitialTypeWasNull = GraphicsSettings.renderPipelineAssetType == null;
try
{
GraphicsSettings.renderPipelineAssetType =
typeof(LegacyRenderPipelineApiProbeAsset);
InvalidSelectionRejected = false;
}
catch (System.ArgumentException ex)
{
InvalidSelectionRejected = true;
InvalidSelectionMentionsScriptableBase =
ex.Message.Contains("ScriptableRenderPipelineAsset");
}
GraphicsSettings.renderPipelineAssetType =
typeof(RenderPipelineApiProbeAsset);
System.Type selectedType = GraphicsSettings.renderPipelineAssetType;

View File

@@ -0,0 +1,15 @@
namespace XCEngine
{
public enum CameraFrameStage : byte
{
PreScenePasses = 0,
ShadowCaster = 1,
DepthOnly = 2,
MainScene = 3,
PostProcess = 4,
FinalOutput = 5,
ObjectId = 6,
PostScenePasses = 7,
OverlayPasses = 8
}
}

View File

@@ -20,10 +20,10 @@ namespace XCEngine
set
{
if (value != null &&
!typeof(RenderPipelineAsset).IsAssignableFrom(value))
!typeof(ScriptableRenderPipelineAsset).IsAssignableFrom(value))
{
throw new ArgumentException(
"GraphicsSettings.renderPipelineAssetType must derive from RenderPipelineAsset.",
"GraphicsSettings.renderPipelineAssetType must derive from ScriptableRenderPipelineAsset.",
nameof(value));
}

View File

@@ -0,0 +1,21 @@
namespace XCEngine
{
public abstract class ScriptableRenderPipeline : Object
{
protected ScriptableRenderPipeline()
{
}
protected internal virtual bool SupportsStageRenderGraph(
CameraFrameStage stage)
{
return false;
}
protected internal virtual bool RecordStageRenderGraph(
CameraFrameStage stage)
{
return false;
}
}
}

View File

@@ -0,0 +1,14 @@
namespace XCEngine
{
public abstract class ScriptableRenderPipelineAsset : RenderPipelineAsset
{
protected ScriptableRenderPipelineAsset()
{
}
protected internal virtual ScriptableRenderPipeline CreatePipeline()
{
return null;
}
}
}