diff --git a/managed/CMakeLists.txt b/managed/CMakeLists.txt index 71977bd4..ae40c49e 100644 --- a/managed/CMakeLists.txt +++ b/managed/CMakeLists.txt @@ -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 diff --git a/managed/GameScripts/RenderPipelineApiProbe.cs b/managed/GameScripts/RenderPipelineApiProbe.cs index 3fec38f6..b3ae5001 100644 --- a/managed/GameScripts/RenderPipelineApiProbe.cs +++ b/managed/GameScripts/RenderPipelineApiProbe.cs @@ -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; diff --git a/managed/XCEngine.ScriptCore/CameraFrameStage.cs b/managed/XCEngine.ScriptCore/CameraFrameStage.cs new file mode 100644 index 00000000..c3fcff83 --- /dev/null +++ b/managed/XCEngine.ScriptCore/CameraFrameStage.cs @@ -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 + } +} diff --git a/managed/XCEngine.ScriptCore/GraphicsSettings.cs b/managed/XCEngine.ScriptCore/GraphicsSettings.cs index 181776a7..5458c4a3 100644 --- a/managed/XCEngine.ScriptCore/GraphicsSettings.cs +++ b/managed/XCEngine.ScriptCore/GraphicsSettings.cs @@ -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)); } diff --git a/managed/XCEngine.ScriptCore/ScriptableRenderPipeline.cs b/managed/XCEngine.ScriptCore/ScriptableRenderPipeline.cs new file mode 100644 index 00000000..a45574fb --- /dev/null +++ b/managed/XCEngine.ScriptCore/ScriptableRenderPipeline.cs @@ -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; + } + } +} diff --git a/managed/XCEngine.ScriptCore/ScriptableRenderPipelineAsset.cs b/managed/XCEngine.ScriptCore/ScriptableRenderPipelineAsset.cs new file mode 100644 index 00000000..a0c18bcd --- /dev/null +++ b/managed/XCEngine.ScriptCore/ScriptableRenderPipelineAsset.cs @@ -0,0 +1,14 @@ +namespace XCEngine +{ + public abstract class ScriptableRenderPipelineAsset : RenderPipelineAsset + { + protected ScriptableRenderPipelineAsset() + { + } + + protected internal virtual ScriptableRenderPipeline CreatePipeline() + { + return null; + } + } +}