refactor(rendering): split managed SRP layers and namespaces
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Runtime.CompilerServices;
|
||||
using XCEngine.Rendering;
|
||||
|
||||
namespace XCEngine
|
||||
{
|
||||
@@ -714,3 +715,4 @@ namespace XCEngine
|
||||
bool usesGraphManagedOutputColor);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public enum CameraFrameColorSource
|
||||
{
|
||||
@@ -7,3 +9,4 @@ namespace XCEngine
|
||||
PostProcessColor = 2
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public enum CameraFrameStage : byte
|
||||
{
|
||||
@@ -13,3 +15,4 @@ namespace XCEngine
|
||||
OverlayPasses = 8
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public enum FinalColorExposureMode : byte
|
||||
{
|
||||
@@ -6,3 +8,4 @@ namespace XCEngine
|
||||
Fixed = 1
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public enum FinalColorOutputTransferMode : byte
|
||||
{
|
||||
@@ -6,3 +8,4 @@ namespace XCEngine
|
||||
LinearToSRGB = 1
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public enum FinalColorToneMappingMode : byte
|
||||
{
|
||||
@@ -7,3 +9,4 @@ namespace XCEngine
|
||||
ACES = 2
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public static class GraphicsSettings
|
||||
{
|
||||
@@ -11,3 +12,4 @@ namespace XCEngine
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public abstract class RenderPipelineAsset : Object
|
||||
{
|
||||
@@ -7,3 +9,4 @@ namespace XCEngine
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public sealed class ScriptableRenderPipelineCameraRequestContext
|
||||
{
|
||||
@@ -32,3 +34,4 @@ namespace XCEngine
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public sealed class ScriptableRenderPipelinePlanningContext
|
||||
{
|
||||
@@ -65,3 +66,4 @@ namespace XCEngine
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public sealed class DirectionalLightData
|
||||
{
|
||||
@@ -38,3 +40,4 @@ namespace XCEngine
|
||||
enabled;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public sealed class DirectionalShadowData
|
||||
{
|
||||
@@ -81,3 +83,4 @@ namespace XCEngine
|
||||
mapHeight > 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public sealed class EnvironmentData
|
||||
{
|
||||
@@ -39,3 +41,4 @@ namespace XCEngine
|
||||
hasProceduralSkybox || hasMaterialSkybox;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public sealed class LightingData
|
||||
{
|
||||
@@ -33,3 +35,4 @@ namespace XCEngine
|
||||
additionalLightCount > 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public enum RenderEnvironmentMode
|
||||
{
|
||||
@@ -7,3 +9,4 @@ namespace XCEngine
|
||||
MaterialSkybox = 2
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public sealed class RenderingData
|
||||
{
|
||||
@@ -87,3 +89,4 @@ namespace XCEngine
|
||||
stage == CameraFrameStage.FinalOutput;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace XCEngine
|
||||
using XCEngine;
|
||||
|
||||
namespace XCEngine.Rendering
|
||||
{
|
||||
public sealed class ShadowData
|
||||
{
|
||||
@@ -20,3 +22,4 @@ namespace XCEngine
|
||||
mainDirectionalShadow.enabled;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
namespace XCEngine
|
||||
{
|
||||
public enum ScenePhase
|
||||
{
|
||||
Opaque = 0,
|
||||
Skybox = 1,
|
||||
Transparent = 3,
|
||||
EditorExtension = 4,
|
||||
PostProcess = 5,
|
||||
FinalOutput = 6
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
namespace XCEngine
|
||||
{
|
||||
public enum SceneRenderInjectionPoint
|
||||
{
|
||||
BeforeOpaque = 0,
|
||||
AfterOpaque = 1,
|
||||
BeforeSkybox = 2,
|
||||
AfterSkybox = 3,
|
||||
BeforeTransparent = 4,
|
||||
AfterTransparent = 5
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user