refactor(srp): collapse universal pipeline wrappers
This commit is contained in:
@@ -197,9 +197,6 @@ set(XCENGINE_RENDER_PIPELINES_UNIVERSAL_SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/LightingData.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RenderClearFlags.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RenderEnvironmentMode.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RendererBackedRenderPipeline.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RendererBackedRenderPipelineAsset.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RendererDrivenRenderPipeline.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RenderPassEvent.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RenderingData.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/RenderingDataResolver.cs
|
||||
@@ -211,6 +208,7 @@ set(XCENGINE_RENDER_PIPELINES_UNIVERSAL_SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/ScriptableRendererFeature.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/CameraRenderRequestContextExtensions.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/StageColorData.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/UniversalRenderPipeline.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/UniversalRenderer.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/UniversalRendererData.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Universal/UniversalRenderPipelineAsset.cs
|
||||
|
||||
@@ -725,6 +725,40 @@ namespace Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class ProbeRendererPipeline
|
||||
: ScriptableRenderPipeline
|
||||
{
|
||||
private ScriptableRenderer m_renderer;
|
||||
|
||||
protected abstract ScriptableRenderer CreateRenderer();
|
||||
|
||||
protected override bool SupportsStageRenderGraph(
|
||||
CameraFrameStage stage)
|
||||
{
|
||||
ScriptableRenderer renderer = GetOrCreateRenderer();
|
||||
return renderer != null &&
|
||||
renderer.SupportsStageRenderGraph(stage);
|
||||
}
|
||||
|
||||
protected override bool RecordStageRenderGraph(
|
||||
ScriptableRenderContext context)
|
||||
{
|
||||
ScriptableRenderer renderer = GetOrCreateRenderer();
|
||||
return renderer != null &&
|
||||
renderer.RecordStageRenderGraph(context);
|
||||
}
|
||||
|
||||
private ScriptableRenderer GetOrCreateRenderer()
|
||||
{
|
||||
if (m_renderer == null)
|
||||
{
|
||||
m_renderer = CreateRenderer();
|
||||
}
|
||||
|
||||
return m_renderer;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class LegacyRenderPipelineApiProbeAsset : RenderPipelineAsset
|
||||
{
|
||||
}
|
||||
@@ -796,16 +830,35 @@ namespace Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class ManagedCameraRequestConfiguredRenderPipelineProbe
|
||||
: ProbeRendererPipeline
|
||||
{
|
||||
protected override ScriptableRenderer CreateRenderer()
|
||||
{
|
||||
return new ProbeSceneRenderer();
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class ManagedCameraRequestConfiguredRenderPipelineProbeAsset
|
||||
: RendererBackedRenderPipelineAsset
|
||||
: ScriptableRenderPipelineAsset
|
||||
{
|
||||
private readonly ManagedCameraRequestConfiguredRendererData
|
||||
m_rendererData =
|
||||
new ManagedCameraRequestConfiguredRendererData();
|
||||
|
||||
protected override ScriptableRendererData GetRendererData()
|
||||
protected override ScriptableRenderPipeline CreatePipeline()
|
||||
{
|
||||
return m_rendererData;
|
||||
return new ManagedCameraRequestConfiguredRenderPipelineProbe();
|
||||
}
|
||||
|
||||
protected override void ConfigureCameraRenderRequest(
|
||||
CameraRenderRequestContext context)
|
||||
{
|
||||
if (context != null &&
|
||||
context.HasDirectionalShadow())
|
||||
{
|
||||
context.ClearDirectionalShadow();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -857,7 +910,7 @@ namespace Gameplay
|
||||
}
|
||||
|
||||
public sealed class ManagedRenderPipelineProbe
|
||||
: RendererBackedRenderPipeline
|
||||
: ProbeRendererPipeline
|
||||
{
|
||||
public static int SupportsStageCallCount;
|
||||
public static int RecordStageCallCount;
|
||||
@@ -883,7 +936,7 @@ namespace Gameplay
|
||||
}
|
||||
|
||||
public sealed class ManagedPostProcessRenderPipelineProbe
|
||||
: RendererBackedRenderPipeline
|
||||
: ProbeRendererPipeline
|
||||
{
|
||||
protected override ScriptableRenderer CreateRenderer()
|
||||
{
|
||||
@@ -894,7 +947,7 @@ namespace Gameplay
|
||||
}
|
||||
|
||||
public sealed class ManagedUniversalRenderPipelineProbe
|
||||
: RendererBackedRenderPipeline
|
||||
: ProbeRendererPipeline
|
||||
{
|
||||
public static int SupportsMainSceneCallCount;
|
||||
public static int SupportsPostProcessCallCount;
|
||||
@@ -961,7 +1014,7 @@ namespace Gameplay
|
||||
}
|
||||
|
||||
public sealed class ManagedPlannedFullscreenRenderPipelineProbe
|
||||
: RendererBackedRenderPipeline
|
||||
: ProbeRendererPipeline
|
||||
{
|
||||
protected override ScriptableRenderer CreateRenderer()
|
||||
{
|
||||
@@ -970,7 +1023,7 @@ namespace Gameplay
|
||||
}
|
||||
|
||||
public sealed class ManagedRenderContextCameraDataProbe
|
||||
: RendererBackedRenderPipeline
|
||||
: ProbeRendererPipeline
|
||||
{
|
||||
protected override ScriptableRenderer CreateRenderer()
|
||||
{
|
||||
@@ -979,7 +1032,7 @@ namespace Gameplay
|
||||
}
|
||||
|
||||
public sealed class ManagedRenderContextStageColorDataProbe
|
||||
: RendererBackedRenderPipeline
|
||||
: ProbeRendererPipeline
|
||||
{
|
||||
protected override ScriptableRenderer CreateRenderer()
|
||||
{
|
||||
|
||||
@@ -31,6 +31,9 @@ namespace Gameplay
|
||||
public bool HasRendererFeatureConfigureCameraFramePlan;
|
||||
public bool HasRendererRecordingContextType;
|
||||
public bool HasRendererCameraRequestContextType;
|
||||
public bool HasRendererBackedRenderPipelineAssetType;
|
||||
public bool HasRendererBackedRenderPipelineType;
|
||||
public bool HasRendererDrivenRenderPipelineType;
|
||||
|
||||
public void Start()
|
||||
{
|
||||
@@ -154,6 +157,15 @@ namespace Gameplay
|
||||
HasRendererCameraRequestContextType =
|
||||
System.Type.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererCameraRequestContext, XCEngine.RenderPipelines.Universal") != null;
|
||||
HasRendererBackedRenderPipelineAssetType =
|
||||
System.Type.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererBackedRenderPipelineAsset, XCEngine.RenderPipelines.Universal") != null;
|
||||
HasRendererBackedRenderPipelineType =
|
||||
System.Type.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererBackedRenderPipeline, XCEngine.RenderPipelines.Universal") != null;
|
||||
HasRendererDrivenRenderPipelineType =
|
||||
System.Type.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererDrivenRenderPipeline, XCEngine.RenderPipelines.Universal") != null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
using XCEngine;
|
||||
using XCEngine.Rendering;
|
||||
|
||||
namespace XCEngine.Rendering.Universal
|
||||
{
|
||||
public abstract class RendererBackedRenderPipelineAsset
|
||||
: ScriptableRenderPipelineAsset
|
||||
{
|
||||
protected RendererBackedRenderPipelineAsset()
|
||||
{
|
||||
}
|
||||
|
||||
protected override ScriptableRenderPipeline CreatePipeline()
|
||||
{
|
||||
ScriptableRendererData rendererData =
|
||||
ResolveRendererData();
|
||||
return rendererData != null
|
||||
? new RendererDrivenRenderPipeline(rendererData)
|
||||
: null;
|
||||
}
|
||||
|
||||
protected override void ConfigureCameraRenderRequest(
|
||||
CameraRenderRequestContext context)
|
||||
{
|
||||
ScriptableRendererData rendererData =
|
||||
ResolveRendererData();
|
||||
if (rendererData != null)
|
||||
{
|
||||
rendererData.ConfigureCameraRenderRequestInstance(
|
||||
context);
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract ScriptableRendererData GetRendererData();
|
||||
|
||||
private ScriptableRendererData ResolveRendererData()
|
||||
{
|
||||
return GetRendererData();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
using XCEngine;
|
||||
using XCEngine.Rendering;
|
||||
|
||||
namespace XCEngine.Rendering.Universal
|
||||
{
|
||||
public class RendererDrivenRenderPipeline
|
||||
: RendererBackedRenderPipeline
|
||||
{
|
||||
private readonly ScriptableRendererData m_rendererData;
|
||||
|
||||
public RendererDrivenRenderPipeline(
|
||||
ScriptableRendererData rendererData)
|
||||
{
|
||||
m_rendererData = rendererData;
|
||||
}
|
||||
|
||||
protected internal override ScriptableRenderer CreateRenderer()
|
||||
{
|
||||
return m_rendererData != null
|
||||
? m_rendererData.CreateRendererInstance()
|
||||
: null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace XCEngine.Rendering.Universal
|
||||
{
|
||||
}
|
||||
|
||||
internal bool SupportsStageRenderGraph(
|
||||
public bool SupportsStageRenderGraph(
|
||||
CameraFrameStage stage)
|
||||
{
|
||||
RenderingData renderingData = new RenderingData(stage);
|
||||
@@ -71,7 +71,7 @@ namespace XCEngine.Rendering.Universal
|
||||
return false;
|
||||
}
|
||||
|
||||
internal bool RecordStageRenderGraph(
|
||||
public bool RecordStageRenderGraph(
|
||||
ScriptableRenderContext context)
|
||||
{
|
||||
if (context == null)
|
||||
|
||||
@@ -3,18 +3,16 @@ using XCEngine.Rendering;
|
||||
|
||||
namespace XCEngine.Rendering.Universal
|
||||
{
|
||||
public abstract class RendererBackedRenderPipeline
|
||||
internal sealed class UniversalRenderPipeline
|
||||
: ScriptableRenderPipeline
|
||||
{
|
||||
private readonly ScriptableRendererData m_rendererData;
|
||||
private ScriptableRenderer m_renderer;
|
||||
|
||||
protected RendererBackedRenderPipeline()
|
||||
public UniversalRenderPipeline(
|
||||
ScriptableRendererData rendererData)
|
||||
{
|
||||
}
|
||||
|
||||
protected internal virtual ScriptableRenderer CreateRenderer()
|
||||
{
|
||||
return null;
|
||||
m_rendererData = rendererData;
|
||||
}
|
||||
|
||||
protected override bool SupportsStageRenderGraph(
|
||||
@@ -33,18 +31,16 @@ namespace XCEngine.Rendering.Universal
|
||||
renderer.RecordStageRenderGraph(context);
|
||||
}
|
||||
|
||||
protected ScriptableRenderer renderer =>
|
||||
GetOrCreateRenderer();
|
||||
|
||||
private ScriptableRenderer GetOrCreateRenderer()
|
||||
{
|
||||
if (m_renderer == null)
|
||||
if (m_renderer == null &&
|
||||
m_rendererData != null)
|
||||
{
|
||||
m_renderer = CreateRenderer();
|
||||
m_renderer =
|
||||
m_rendererData.CreateRendererInstance();
|
||||
}
|
||||
|
||||
return m_renderer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,12 +4,33 @@ using XCEngine.Rendering;
|
||||
namespace XCEngine.Rendering.Universal
|
||||
{
|
||||
public class UniversalRenderPipelineAsset
|
||||
: RendererBackedRenderPipelineAsset
|
||||
: ScriptableRenderPipelineAsset
|
||||
{
|
||||
public UniversalRendererData rendererData =
|
||||
new UniversalRendererData();
|
||||
|
||||
protected override ScriptableRendererData GetRendererData()
|
||||
protected override ScriptableRenderPipeline CreatePipeline()
|
||||
{
|
||||
ScriptableRendererData resolvedRendererData =
|
||||
ResolveRendererData();
|
||||
return resolvedRendererData != null
|
||||
? new UniversalRenderPipeline(resolvedRendererData)
|
||||
: null;
|
||||
}
|
||||
|
||||
protected override void ConfigureCameraRenderRequest(
|
||||
CameraRenderRequestContext context)
|
||||
{
|
||||
ScriptableRendererData resolvedRendererData =
|
||||
ResolveRendererData();
|
||||
if (resolvedRendererData != null)
|
||||
{
|
||||
resolvedRendererData.ConfigureCameraRenderRequestInstance(
|
||||
context);
|
||||
}
|
||||
}
|
||||
|
||||
private ScriptableRendererData ResolveRendererData()
|
||||
{
|
||||
if (rendererData == null)
|
||||
{
|
||||
|
||||
@@ -1174,6 +1174,9 @@ TEST_F(
|
||||
bool hasRendererFeatureConfigureCameraFramePlan = false;
|
||||
bool hasRendererRecordingContextType = false;
|
||||
bool hasRendererCameraRequestContextType = false;
|
||||
bool hasRendererBackedRenderPipelineAssetType = false;
|
||||
bool hasRendererBackedRenderPipelineType = false;
|
||||
bool hasRendererDrivenRenderPipelineType = false;
|
||||
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(
|
||||
selectionScript,
|
||||
@@ -1267,6 +1270,18 @@ TEST_F(
|
||||
selectionScript,
|
||||
"HasRendererCameraRequestContextType",
|
||||
hasRendererCameraRequestContextType));
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(
|
||||
selectionScript,
|
||||
"HasRendererBackedRenderPipelineAssetType",
|
||||
hasRendererBackedRenderPipelineAssetType));
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(
|
||||
selectionScript,
|
||||
"HasRendererBackedRenderPipelineType",
|
||||
hasRendererBackedRenderPipelineType));
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(
|
||||
selectionScript,
|
||||
"HasRendererDrivenRenderPipelineType",
|
||||
hasRendererDrivenRenderPipelineType));
|
||||
|
||||
EXPECT_FALSE(hasPublicContextRecordScene);
|
||||
EXPECT_FALSE(hasPublicContextRecordOpaqueScenePhase);
|
||||
@@ -1291,6 +1306,9 @@ TEST_F(
|
||||
EXPECT_FALSE(hasRendererFeatureConfigureCameraFramePlan);
|
||||
EXPECT_FALSE(hasRendererRecordingContextType);
|
||||
EXPECT_FALSE(hasRendererCameraRequestContextType);
|
||||
EXPECT_FALSE(hasRendererBackedRenderPipelineAssetType);
|
||||
EXPECT_FALSE(hasRendererBackedRenderPipelineType);
|
||||
EXPECT_FALSE(hasRendererDrivenRenderPipelineType);
|
||||
}
|
||||
|
||||
TEST_F(
|
||||
|
||||
Reference in New Issue
Block a user