refactor(srp): formalize renderer block recording
This commit is contained in:
@@ -23,11 +23,21 @@ namespace XCEngine.Rendering.Universal
|
||||
public virtual bool SupportsStage(
|
||||
CameraFrameStage stage)
|
||||
{
|
||||
CameraFrameStage resolvedStage;
|
||||
return TryResolveStage(
|
||||
RendererBlock block;
|
||||
return TryResolveRendererBlock(
|
||||
renderPassEvent,
|
||||
out resolvedStage) &&
|
||||
resolvedStage == stage;
|
||||
out block) &&
|
||||
RendererBlockUtility.GetStage(block) == stage;
|
||||
}
|
||||
|
||||
internal bool SupportsRendererBlock(
|
||||
RendererBlock block)
|
||||
{
|
||||
RendererBlock resolvedBlock;
|
||||
return TryResolveRendererBlock(
|
||||
renderPassEvent,
|
||||
out resolvedBlock) &&
|
||||
resolvedBlock == block;
|
||||
}
|
||||
|
||||
internal bool Record(
|
||||
@@ -209,38 +219,60 @@ namespace XCEngine.Rendering.Universal
|
||||
internal static bool TryResolveStage(
|
||||
RenderPassEvent passEvent,
|
||||
out CameraFrameStage stage)
|
||||
{
|
||||
RendererBlock block;
|
||||
if (TryResolveRendererBlock(
|
||||
passEvent,
|
||||
out block))
|
||||
{
|
||||
stage =
|
||||
RendererBlockUtility.GetStage(block);
|
||||
return true;
|
||||
}
|
||||
|
||||
stage = CameraFrameStage.MainScene;
|
||||
return false;
|
||||
}
|
||||
|
||||
internal static bool TryResolveRendererBlock(
|
||||
RenderPassEvent passEvent,
|
||||
out RendererBlock block)
|
||||
{
|
||||
switch (passEvent)
|
||||
{
|
||||
case RenderPassEvent.BeforeRenderingShadows:
|
||||
case RenderPassEvent.AfterRenderingShadows:
|
||||
stage = CameraFrameStage.ShadowCaster;
|
||||
block = RendererBlock.ShadowCaster;
|
||||
return true;
|
||||
case RenderPassEvent.BeforeRenderingPrePasses:
|
||||
case RenderPassEvent.AfterRenderingPrePasses:
|
||||
stage = CameraFrameStage.DepthOnly;
|
||||
block = RendererBlock.DepthPrepass;
|
||||
return true;
|
||||
case RenderPassEvent.BeforeRenderingOpaques:
|
||||
case RenderPassEvent.RenderOpaques:
|
||||
case RenderPassEvent.AfterRenderingOpaques:
|
||||
block = RendererBlock.MainOpaque;
|
||||
return true;
|
||||
case RenderPassEvent.BeforeRenderingSkybox:
|
||||
case RenderPassEvent.RenderSkybox:
|
||||
case RenderPassEvent.AfterRenderingSkybox:
|
||||
block = RendererBlock.MainSkybox;
|
||||
return true;
|
||||
case RenderPassEvent.BeforeRenderingTransparents:
|
||||
case RenderPassEvent.RenderTransparents:
|
||||
case RenderPassEvent.AfterRenderingTransparents:
|
||||
stage = CameraFrameStage.MainScene;
|
||||
block = RendererBlock.MainTransparent;
|
||||
return true;
|
||||
case RenderPassEvent.BeforeRenderingPostProcessing:
|
||||
case RenderPassEvent.AfterRenderingPostProcessing:
|
||||
stage = CameraFrameStage.PostProcess;
|
||||
block = RendererBlock.PostProcess;
|
||||
return true;
|
||||
case RenderPassEvent.BeforeRenderingFinalOutput:
|
||||
case RenderPassEvent.AfterRenderingFinalOutput:
|
||||
stage = CameraFrameStage.FinalOutput;
|
||||
block = RendererBlock.FinalOutput;
|
||||
return true;
|
||||
default:
|
||||
stage = CameraFrameStage.MainScene;
|
||||
block = RendererBlock.MainOpaque;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user