Files
XCEngine/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderPipeline.cs

93 lines
2.7 KiB
C#

using XCEngine;
using XCEngine.Rendering;
namespace XCEngine.Rendering.Universal
{
public sealed class UniversalRenderPipeline
: ScriptableRenderPipeline
{
private readonly UniversalRenderPipelineAsset m_asset;
public UniversalRenderPipeline(
UniversalRenderPipelineAsset asset)
{
m_asset = asset;
}
protected override bool SupportsStageRenderGraph(
CameraFrameStage stage)
{
return SupportsStageRenderGraphContextual(
stage,
-1);
}
protected override bool SupportsStageRenderGraphContextual(
CameraFrameStage stage,
int rendererIndex)
{
return SupportsStageRenderGraphContextual(
stage,
rendererIndex,
0UL);
}
protected override bool SupportsStageRenderGraphContextual(
CameraFrameStage stage,
int rendererIndex,
ulong framePlanId)
{
ScriptableRenderer renderer =
ResolveRenderer(rendererIndex);
return renderer != null &&
renderer.SupportsRendererRecordingInstance(
new RendererRecordingContext(
stage,
rendererIndex,
framePlanId));
}
protected override bool RecordStageRenderGraph(
ScriptableRenderContext context)
{
if (context == null)
{
return false;
}
RendererRecordingContext recordingContext =
new RendererRecordingContext(context);
ScriptableRenderer renderer =
ResolveRenderer(recordingContext.rendererIndex);
return renderer != null &&
renderer.RecordRendererInstance(recordingContext);
}
protected override void FinishCameraStackRendering(
int rendererIndex,
ulong framePlanId)
{
ScriptableRenderer renderer =
ResolveRenderer(rendererIndex);
if (renderer == null)
{
return;
}
renderer.FinishCameraStackRenderingInstance(
new RendererRecordingContext(
CameraFrameStage.MainScene,
rendererIndex,
framePlanId));
}
private ScriptableRenderer ResolveRenderer(
int rendererIndex)
{
return m_asset != null
? m_asset.ResolveRenderer(rendererIndex)
: null;
}
}
}