refactor(rendering): split managed SRP layers and namespaces

This commit is contained in:
2026-04-19 02:38:48 +08:00
parent 612e3ba0b3
commit 7429f22fb1
46 changed files with 629 additions and 351 deletions

View File

@@ -1,53 +0,0 @@
namespace XCEngine
{
public enum FullscreenPassType
{
ColorScale = 0,
ShaderVector = 1
}
public struct FullscreenPassDescriptor
{
public FullscreenPassType type;
public string shaderPath;
public string passName;
public Vector4 vectorPayload;
public static FullscreenPassDescriptor CreateColorScale(
Vector4 colorScale)
{
FullscreenPassDescriptor descriptor = new FullscreenPassDescriptor();
descriptor.type = FullscreenPassType.ColorScale;
descriptor.shaderPath = string.Empty;
descriptor.passName = string.Empty;
descriptor.vectorPayload = colorScale;
return descriptor;
}
public static FullscreenPassDescriptor CreateShaderVector(
string shaderPath,
Vector4 vectorPayload,
string passName = null)
{
FullscreenPassDescriptor descriptor = new FullscreenPassDescriptor();
descriptor.type = FullscreenPassType.ShaderVector;
descriptor.shaderPath = shaderPath ?? string.Empty;
descriptor.passName = passName ?? string.Empty;
descriptor.vectorPayload = vectorPayload;
return descriptor;
}
public bool IsValid()
{
switch (type)
{
case FullscreenPassType.ColorScale:
return true;
case FullscreenPassType.ShaderVector:
return !string.IsNullOrEmpty(shaderPath);
default:
return false;
}
}
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Runtime.CompilerServices;
using XCEngine.Rendering;
namespace XCEngine
{
@@ -714,3 +715,4 @@ namespace XCEngine
bool usesGraphManagedOutputColor);
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public enum CameraFrameColorSource
{
@@ -7,3 +9,4 @@ namespace XCEngine
PostProcessColor = 2
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public enum CameraFrameStage : byte
{
@@ -13,3 +15,4 @@ namespace XCEngine
OverlayPasses = 8
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public enum FinalColorExposureMode : byte
{
@@ -6,3 +8,4 @@ namespace XCEngine
Fixed = 1
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public enum FinalColorOutputTransferMode : byte
{
@@ -6,3 +8,4 @@ namespace XCEngine
LinearToSRGB = 1
}
}

View File

@@ -1,6 +1,7 @@
using System.Runtime.InteropServices;
using XCEngine;
namespace XCEngine
namespace XCEngine.Rendering
{
[StructLayout(LayoutKind.Sequential)]
public struct FinalColorSettings
@@ -20,3 +21,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public enum FinalColorToneMappingMode : byte
{
@@ -7,3 +9,4 @@ namespace XCEngine
ACES = 2
}
}

View File

@@ -1,6 +1,7 @@
using System;
using XCEngine;
namespace XCEngine
namespace XCEngine.Rendering
{
public static class GraphicsSettings
{
@@ -11,3 +12,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public abstract class RenderPipelineAsset : Object
{
@@ -7,3 +9,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,9 +1,33 @@
using System;
using XCEngine;
namespace XCEngine
namespace XCEngine.Rendering
{
public sealed class ScriptableRenderContext
{
private enum RecordedScenePhase
{
Opaque = 0,
Skybox = 1,
Transparent = 3
}
private enum RecordedSceneInjectionPoint
{
BeforeOpaque = 0,
AfterOpaque = 1,
BeforeSkybox = 2,
AfterSkybox = 3,
BeforeTransparent = 4,
AfterTransparent = 5
}
private enum RecordedFullscreenPassType
{
ColorScale = 0,
ShaderVector = 1
}
private readonly ulong m_nativeHandle;
private CameraData m_cameraData;
private LightingData m_lightingData;
@@ -42,19 +66,98 @@ namespace XCEngine
m_stageColorData ??
(m_stageColorData = ResolveStageColorData());
public bool RecordScene()
internal bool RecordScene()
{
return InternalCalls
.Rendering_ScriptableRenderContext_RecordScene(
m_nativeHandle);
}
public bool RenderScene()
internal bool RecordOpaqueScenePhase()
{
return RecordScene();
return RecordScenePhaseInternal(
RecordedScenePhase.Opaque);
}
public bool RecordScenePhase(ScenePhase scenePhase)
internal bool RecordSkyboxScenePhase()
{
return RecordScenePhaseInternal(
RecordedScenePhase.Skybox);
}
internal bool RecordTransparentScenePhase()
{
return RecordScenePhaseInternal(
RecordedScenePhase.Transparent);
}
internal bool RecordBeforeOpaqueInjection()
{
return RecordSceneInjectionPointInternal(
RecordedSceneInjectionPoint.BeforeOpaque);
}
internal bool RecordAfterOpaqueInjection()
{
return RecordSceneInjectionPointInternal(
RecordedSceneInjectionPoint.AfterOpaque);
}
internal bool RecordBeforeSkyboxInjection()
{
return RecordSceneInjectionPointInternal(
RecordedSceneInjectionPoint.BeforeSkybox);
}
internal bool RecordAfterSkyboxInjection()
{
return RecordSceneInjectionPointInternal(
RecordedSceneInjectionPoint.AfterSkybox);
}
internal bool RecordBeforeTransparentInjection()
{
return RecordSceneInjectionPointInternal(
RecordedSceneInjectionPoint.BeforeTransparent);
}
internal bool RecordAfterTransparentInjection()
{
return RecordSceneInjectionPointInternal(
RecordedSceneInjectionPoint.AfterTransparent);
}
internal bool RecordColorScaleFullscreenPass(
Vector4 colorScale)
{
return RecordFullscreenPassInternal(
RecordedFullscreenPassType.ColorScale,
string.Empty,
string.Empty,
colorScale);
}
internal bool RecordShaderVectorFullscreenPass(
string shaderPath,
Vector4 vectorPayload,
string passName = null)
{
if (string.IsNullOrEmpty(shaderPath))
{
throw new ArgumentException(
"Fullscreen shader path cannot be null or empty.",
nameof(shaderPath));
}
return RecordFullscreenPassInternal(
RecordedFullscreenPassType.ShaderVector,
shaderPath,
passName ?? string.Empty,
vectorPayload);
}
private bool RecordScenePhaseInternal(
RecordedScenePhase scenePhase)
{
return InternalCalls
.Rendering_ScriptableRenderContext_RecordScenePhase(
@@ -62,8 +165,8 @@ namespace XCEngine
(int)scenePhase);
}
public bool RecordSceneInjectionPoint(
SceneRenderInjectionPoint injectionPoint)
private bool RecordSceneInjectionPointInternal(
RecordedSceneInjectionPoint injectionPoint)
{
return InternalCalls
.Rendering_ScriptableRenderContext_RecordSceneInjectionPoint(
@@ -71,23 +174,16 @@ namespace XCEngine
(int)injectionPoint);
}
public bool RecordFullscreenPass(
FullscreenPassDescriptor pass)
private bool RecordFullscreenPassInternal(
RecordedFullscreenPassType passType,
string shaderPath,
string passName,
Vector4 vectorPayload)
{
if (!pass.IsValid())
{
throw new ArgumentException(
"Invalid fullscreen pass descriptor.",
nameof(pass));
}
string shaderPath = pass.shaderPath ?? string.Empty;
string passName = pass.passName ?? string.Empty;
Vector4 vectorPayload = pass.vectorPayload;
return InternalCalls
.Rendering_ScriptableRenderContext_RecordFullscreenPass(
m_nativeHandle,
(int)pass.type,
(int)passType,
shaderPath,
passName,
ref vectorPayload);
@@ -340,3 +436,4 @@ namespace XCEngine
}
}
}

View File

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

View File

@@ -0,0 +1,32 @@
using XCEngine;
namespace XCEngine.Rendering
{
public abstract class ScriptableRenderPipelineAsset : RenderPipelineAsset
{
protected ScriptableRenderPipelineAsset()
{
}
protected internal virtual ScriptableRenderPipeline CreatePipeline()
{
return null;
}
protected internal virtual void ConfigureCameraRenderRequest(
ScriptableRenderPipelineCameraRequestContext context)
{
}
protected internal virtual void ConfigureCameraFramePlan(
ScriptableRenderPipelinePlanningContext context)
{
}
protected internal virtual FinalColorSettings GetDefaultFinalColorSettings()
{
return FinalColorSettings.CreateDefault();
}
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public sealed class ScriptableRenderPipelineCameraRequestContext
{
@@ -32,3 +34,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,6 +1,7 @@
using System;
using XCEngine;
namespace XCEngine
namespace XCEngine.Rendering
{
public sealed class ScriptableRenderPipelinePlanningContext
{
@@ -65,3 +66,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public sealed class CameraData
{
@@ -107,3 +109,4 @@ namespace XCEngine
public int viewportHeight { get; }
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public sealed class DirectionalLightData
{
@@ -38,3 +40,4 @@ namespace XCEngine
enabled;
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public sealed class DirectionalShadowData
{
@@ -81,3 +83,4 @@ namespace XCEngine
mapHeight > 0;
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public sealed class EnvironmentData
{
@@ -39,3 +41,4 @@ namespace XCEngine
hasProceduralSkybox || hasMaterialSkybox;
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public sealed class FinalColorData
{
@@ -37,3 +39,4 @@ namespace XCEngine
settings.finalColorScale.w != 1.0f;
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public sealed class LightingData
{
@@ -33,3 +35,4 @@ namespace XCEngine
additionalLightCount > 0;
}
}

View File

@@ -1,6 +1,7 @@
using System;
using XCEngine;
namespace XCEngine
namespace XCEngine.Rendering
{
[Flags]
public enum RenderClearFlags
@@ -11,3 +12,4 @@ namespace XCEngine
All = Color | Depth
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public enum RenderEnvironmentMode
{
@@ -7,3 +9,4 @@ namespace XCEngine
MaterialSkybox = 2
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public sealed class RenderingData
{
@@ -87,3 +89,4 @@ namespace XCEngine
stage == CameraFrameStage.FinalOutput;
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public sealed class ShadowData
{
@@ -20,3 +22,4 @@ namespace XCEngine
mainDirectionalShadow.enabled;
}
}

View File

@@ -1,4 +1,6 @@
namespace XCEngine
using XCEngine;
namespace XCEngine.Rendering
{
public sealed class StageColorData
{
@@ -24,3 +26,4 @@ namespace XCEngine
public bool usesGraphManagedOutputColor { get; }
}
}

View File

@@ -1,4 +1,8 @@
namespace XCEngine
using XCEngine;
using XCEngine.Rendering;
using XCEngine.Rendering.Renderer;
namespace XCEngine.Rendering.FirstParty
{
internal sealed class ColorScalePostProcessPass
: ScriptableRenderPass
@@ -14,16 +18,15 @@ namespace XCEngine
}
protected override bool RecordRenderGraph(
ScriptableRenderContext context,
RendererRecordingContext context,
RenderingData renderingData)
{
return context != null &&
renderingData != null &&
renderingData.isPostProcessStage &&
m_feature != null &&
context.RecordFullscreenPass(
FullscreenPassDescriptor.CreateColorScale(
m_feature.colorScale));
context.RecordColorScaleFullscreenPass(
m_feature.colorScale);
}
}
@@ -77,3 +80,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,4 +1,8 @@
namespace XCEngine
using XCEngine;
using XCEngine.Rendering;
using XCEngine.Rendering.Renderer;
namespace XCEngine.Rendering.FirstParty
{
public sealed class DisableDirectionalShadowRendererFeature
: ScriptableRendererFeature
@@ -14,3 +18,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,11 +1,16 @@
namespace XCEngine
using XCEngine;
using XCEngine.Rendering;
using XCEngine.Rendering.Renderer;
namespace XCEngine.Rendering.FirstParty
{
public class ForwardRenderPipelineAsset : ScriptableRenderPipelineAsset
public class ForwardRenderPipelineAsset
: RendererBackedRenderPipelineAsset
{
public ForwardRendererData rendererData =
new ForwardRendererData();
protected override ScriptableRendererData GetDefaultRendererData()
protected override ScriptableRendererData GetRendererData()
{
if (rendererData == null)
{
@@ -16,3 +21,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,90 +1,73 @@
namespace XCEngine
using System;
using XCEngine;
using XCEngine.Rendering;
using XCEngine.Rendering.Renderer;
namespace XCEngine.Rendering.FirstParty
{
internal sealed class ForwardSceneInjectionPass : ScriptableRenderPass
internal sealed class ForwardSceneRecordingPass : ScriptableRenderPass
{
private readonly SceneRenderInjectionPoint m_injectionPoint;
private readonly Func<RendererRecordingContext, bool> m_recordAction;
public ForwardSceneInjectionPass(
public ForwardSceneRecordingPass(
RenderPassEvent passEvent,
SceneRenderInjectionPoint injectionPoint)
Func<RendererRecordingContext, bool> recordAction)
{
renderPassEvent = passEvent;
m_injectionPoint = injectionPoint;
m_recordAction = recordAction;
}
protected override bool RecordRenderGraph(
ScriptableRenderContext context,
RendererRecordingContext context,
RenderingData renderingData)
{
return context != null &&
renderingData != null &&
renderingData.isMainSceneStage &&
context.RecordSceneInjectionPoint(m_injectionPoint);
}
}
internal sealed class ForwardScenePhasePass : ScriptableRenderPass
{
private readonly ScenePhase m_scenePhase;
public ForwardScenePhasePass(
RenderPassEvent passEvent,
ScenePhase scenePhase)
{
renderPassEvent = passEvent;
m_scenePhase = scenePhase;
}
protected override bool RecordRenderGraph(
ScriptableRenderContext context,
RenderingData renderingData)
{
return context != null &&
renderingData != null &&
renderingData.isMainSceneStage &&
context.RecordScenePhase(m_scenePhase);
m_recordAction != null &&
m_recordAction(context);
}
}
internal sealed class ForwardSceneFeature : ScriptableRendererFeature
{
private readonly ForwardRendererData m_rendererData;
private readonly ForwardSceneInjectionPass m_beforeOpaquePass =
new ForwardSceneInjectionPass(
private readonly ForwardSceneRecordingPass m_beforeOpaquePass =
new ForwardSceneRecordingPass(
RenderPassEvent.BeforeRenderingOpaques,
SceneRenderInjectionPoint.BeforeOpaque);
private readonly ForwardScenePhasePass m_opaquePass =
new ForwardScenePhasePass(
context => context.RecordBeforeOpaqueInjection());
private readonly ForwardSceneRecordingPass m_opaquePass =
new ForwardSceneRecordingPass(
RenderPassEvent.RenderOpaques,
ScenePhase.Opaque);
private readonly ForwardSceneInjectionPass m_afterOpaquePass =
new ForwardSceneInjectionPass(
context => context.RecordOpaqueScenePhase());
private readonly ForwardSceneRecordingPass m_afterOpaquePass =
new ForwardSceneRecordingPass(
RenderPassEvent.AfterRenderingOpaques,
SceneRenderInjectionPoint.AfterOpaque);
private readonly ForwardSceneInjectionPass m_beforeSkyboxPass =
new ForwardSceneInjectionPass(
context => context.RecordAfterOpaqueInjection());
private readonly ForwardSceneRecordingPass m_beforeSkyboxPass =
new ForwardSceneRecordingPass(
RenderPassEvent.BeforeRenderingSkybox,
SceneRenderInjectionPoint.BeforeSkybox);
private readonly ForwardScenePhasePass m_skyboxPass =
new ForwardScenePhasePass(
context => context.RecordBeforeSkyboxInjection());
private readonly ForwardSceneRecordingPass m_skyboxPass =
new ForwardSceneRecordingPass(
RenderPassEvent.RenderSkybox,
ScenePhase.Skybox);
private readonly ForwardSceneInjectionPass m_afterSkyboxPass =
new ForwardSceneInjectionPass(
context => context.RecordSkyboxScenePhase());
private readonly ForwardSceneRecordingPass m_afterSkyboxPass =
new ForwardSceneRecordingPass(
RenderPassEvent.AfterRenderingSkybox,
SceneRenderInjectionPoint.AfterSkybox);
private readonly ForwardSceneInjectionPass m_beforeTransparentPass =
new ForwardSceneInjectionPass(
context => context.RecordAfterSkyboxInjection());
private readonly ForwardSceneRecordingPass m_beforeTransparentPass =
new ForwardSceneRecordingPass(
RenderPassEvent.BeforeRenderingTransparents,
SceneRenderInjectionPoint.BeforeTransparent);
private readonly ForwardScenePhasePass m_transparentPass =
new ForwardScenePhasePass(
context => context.RecordBeforeTransparentInjection());
private readonly ForwardSceneRecordingPass m_transparentPass =
new ForwardSceneRecordingPass(
RenderPassEvent.RenderTransparents,
ScenePhase.Transparent);
private readonly ForwardSceneInjectionPass m_afterTransparentPass =
new ForwardSceneInjectionPass(
context => context.RecordTransparentScenePhase());
private readonly ForwardSceneRecordingPass m_afterTransparentPass =
new ForwardSceneRecordingPass(
RenderPassEvent.AfterRenderingTransparents,
SceneRenderInjectionPoint.AfterTransparent);
context => context.RecordAfterTransparentInjection());
public ForwardSceneFeature(
ForwardRendererData rendererData)
@@ -145,3 +128,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,6 +1,9 @@
using System;
using XCEngine;
using XCEngine.Rendering;
using XCEngine.Rendering.Renderer;
namespace XCEngine
namespace XCEngine.Rendering.FirstParty
{
public class ForwardRendererData : ScriptableRendererData
{
@@ -22,3 +25,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,4 +1,7 @@
namespace XCEngine
using XCEngine;
using XCEngine.Rendering;
namespace XCEngine.Rendering.Renderer
{
public enum RenderPassEvent
{
@@ -17,3 +20,4 @@ namespace XCEngine
AfterRenderingFinalOutput = 520
}
}

View File

@@ -1,10 +1,14 @@
namespace XCEngine
using XCEngine;
using XCEngine.Rendering;
namespace XCEngine.Rendering.Renderer
{
public abstract class ScriptableRenderPipeline : Object
public abstract class RendererBackedRenderPipeline
: ScriptableRenderPipeline
{
private ScriptableRenderer m_renderer;
protected ScriptableRenderPipeline()
protected RendererBackedRenderPipeline()
{
}
@@ -13,7 +17,7 @@ namespace XCEngine
return null;
}
protected internal virtual bool SupportsStageRenderGraph(
protected internal override bool SupportsStageRenderGraph(
CameraFrameStage stage)
{
ScriptableRenderer renderer = GetOrCreateRenderer();
@@ -21,7 +25,7 @@ namespace XCEngine
renderer.SupportsStageRenderGraph(stage);
}
protected internal virtual bool RecordStageRenderGraph(
protected internal override bool RecordStageRenderGraph(
ScriptableRenderContext context)
{
ScriptableRenderer renderer = GetOrCreateRenderer();
@@ -43,3 +47,4 @@ namespace XCEngine
}
}
}

View File

@@ -0,0 +1,54 @@
using XCEngine;
using XCEngine.Rendering;
namespace XCEngine.Rendering.Renderer
{
public abstract class RendererBackedRenderPipelineAsset
: ScriptableRenderPipelineAsset
{
protected RendererBackedRenderPipelineAsset()
{
}
protected internal override ScriptableRenderPipeline CreatePipeline()
{
ScriptableRendererData rendererData =
ResolveRendererData();
return rendererData != null
? new RendererDrivenRenderPipeline(rendererData)
: null;
}
protected internal override void ConfigureCameraRenderRequest(
ScriptableRenderPipelineCameraRequestContext context)
{
ScriptableRendererData rendererData =
ResolveRendererData();
if (rendererData != null)
{
rendererData.ConfigureCameraRenderRequestInstance(
context);
}
}
protected internal override void ConfigureCameraFramePlan(
ScriptableRenderPipelinePlanningContext context)
{
ScriptableRendererData rendererData =
ResolveRendererData();
if (rendererData != null)
{
rendererData.ConfigureCameraFramePlanInstance(
context);
}
}
protected abstract ScriptableRendererData GetRendererData();
private ScriptableRendererData ResolveRendererData()
{
return GetRendererData();
}
}
}

View File

@@ -1,6 +1,10 @@
namespace XCEngine
using XCEngine;
using XCEngine.Rendering;
namespace XCEngine.Rendering.Renderer
{
public class RendererDrivenRenderPipeline : ScriptableRenderPipeline
public class RendererDrivenRenderPipeline
: RendererBackedRenderPipeline
{
private readonly ScriptableRendererData m_rendererData;
@@ -18,3 +22,4 @@ namespace XCEngine
}
}
}

View File

@@ -0,0 +1,97 @@
using XCEngine;
using XCEngine.Rendering;
namespace XCEngine.Rendering.Renderer
{
public sealed class RendererRecordingContext
{
private readonly ScriptableRenderContext m_renderContext;
internal RendererRecordingContext(
ScriptableRenderContext renderContext)
{
m_renderContext = renderContext;
}
public bool RecordScene()
{
return m_renderContext != null &&
m_renderContext.RecordScene();
}
public bool RecordOpaqueScenePhase()
{
return m_renderContext != null &&
m_renderContext.RecordOpaqueScenePhase();
}
public bool RecordSkyboxScenePhase()
{
return m_renderContext != null &&
m_renderContext.RecordSkyboxScenePhase();
}
public bool RecordTransparentScenePhase()
{
return m_renderContext != null &&
m_renderContext.RecordTransparentScenePhase();
}
public bool RecordBeforeOpaqueInjection()
{
return m_renderContext != null &&
m_renderContext.RecordBeforeOpaqueInjection();
}
public bool RecordAfterOpaqueInjection()
{
return m_renderContext != null &&
m_renderContext.RecordAfterOpaqueInjection();
}
public bool RecordBeforeSkyboxInjection()
{
return m_renderContext != null &&
m_renderContext.RecordBeforeSkyboxInjection();
}
public bool RecordAfterSkyboxInjection()
{
return m_renderContext != null &&
m_renderContext.RecordAfterSkyboxInjection();
}
public bool RecordBeforeTransparentInjection()
{
return m_renderContext != null &&
m_renderContext.RecordBeforeTransparentInjection();
}
public bool RecordAfterTransparentInjection()
{
return m_renderContext != null &&
m_renderContext.RecordAfterTransparentInjection();
}
public bool RecordColorScaleFullscreenPass(
Vector4 colorScale)
{
return m_renderContext != null &&
m_renderContext.RecordColorScaleFullscreenPass(
colorScale);
}
public bool RecordShaderVectorFullscreenPass(
string shaderPath,
Vector4 vectorPayload,
string passName = null)
{
return m_renderContext != null &&
m_renderContext.RecordShaderVectorFullscreenPass(
shaderPath,
vectorPayload,
passName);
}
}
}

View File

@@ -1,4 +1,7 @@
namespace XCEngine
using XCEngine;
using XCEngine.Rendering;
namespace XCEngine.Rendering.Renderer
{
public abstract class ScriptableRenderPass
{
@@ -20,7 +23,7 @@ namespace XCEngine
}
internal bool Record(
ScriptableRenderContext context,
RendererRecordingContext context,
RenderingData renderingData)
{
return RecordRenderGraph(
@@ -29,7 +32,7 @@ namespace XCEngine
}
protected abstract bool RecordRenderGraph(
ScriptableRenderContext context,
RendererRecordingContext context,
RenderingData renderingData);
internal static bool TryResolveStage(
@@ -64,3 +67,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,6 +1,8 @@
using System.Collections.Generic;
using XCEngine;
using XCEngine.Rendering;
namespace XCEngine
namespace XCEngine.Rendering.Renderer
{
public abstract class ScriptableRenderer
{
@@ -79,6 +81,8 @@ namespace XCEngine
RenderingData renderingData =
new RenderingData(context);
RendererRecordingContext recordingContext =
new RendererRecordingContext(context);
BuildPassQueue(renderingData);
bool recordedAnyPass = false;
@@ -92,7 +96,7 @@ namespace XCEngine
}
if (!renderPass.Record(
context,
recordingContext,
renderingData))
{
return false;
@@ -126,3 +130,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,6 +1,8 @@
using System;
using XCEngine;
using XCEngine.Rendering;
namespace XCEngine
namespace XCEngine.Rendering.Renderer
{
public abstract class ScriptableRendererData : Object
{
@@ -97,3 +99,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,4 +1,7 @@
namespace XCEngine
using XCEngine;
using XCEngine.Rendering;
namespace XCEngine.Rendering.Renderer
{
public abstract class ScriptableRendererFeature
{
@@ -29,3 +32,4 @@ namespace XCEngine
}
}
}

View File

@@ -1,12 +0,0 @@
namespace XCEngine
{
public enum ScenePhase
{
Opaque = 0,
Skybox = 1,
Transparent = 3,
EditorExtension = 4,
PostProcess = 5,
FinalOutput = 6
}
}

View File

@@ -1,12 +0,0 @@
namespace XCEngine
{
public enum SceneRenderInjectionPoint
{
BeforeOpaque = 0,
AfterOpaque = 1,
BeforeSkybox = 2,
AfterSkybox = 3,
BeforeTransparent = 4,
AfterTransparent = 5
}
}

View File

@@ -1,57 +0,0 @@
namespace XCEngine
{
public abstract class ScriptableRenderPipelineAsset : RenderPipelineAsset
{
protected ScriptableRenderPipelineAsset()
{
}
protected internal virtual ScriptableRenderPipeline CreatePipeline()
{
ScriptableRendererData rendererData =
ResolveDefaultRendererData();
return rendererData != null
? new RendererDrivenRenderPipeline(rendererData)
: null;
}
protected internal virtual void ConfigureCameraRenderRequest(
ScriptableRenderPipelineCameraRequestContext context)
{
ScriptableRendererData rendererData =
ResolveDefaultRendererData();
if (rendererData != null)
{
rendererData.ConfigureCameraRenderRequestInstance(
context);
}
}
protected internal virtual void ConfigureCameraFramePlan(
ScriptableRenderPipelinePlanningContext context)
{
ScriptableRendererData rendererData =
ResolveDefaultRendererData();
if (rendererData != null)
{
rendererData.ConfigureCameraFramePlanInstance(
context);
}
}
protected internal virtual FinalColorSettings GetDefaultFinalColorSettings()
{
return FinalColorSettings.CreateDefault();
}
internal ScriptableRendererData ResolveDefaultRendererData()
{
return GetDefaultRendererData();
}
protected virtual ScriptableRendererData GetDefaultRendererData()
{
return null;
}
}
}