Add URP render pass API parity shims
This commit is contained in:
@@ -12,6 +12,10 @@ namespace XCEngine.Rendering.Universal
|
||||
"Universal.FinalColorFullscreen";
|
||||
private const string kShaderVectorFullscreenPassName =
|
||||
"Universal.ShaderVectorFullscreen";
|
||||
private readonly CommandBuffer m_lifecycleCommandBuffer =
|
||||
new CommandBuffer("ScriptableRenderPass");
|
||||
private ScriptableRenderPassInput m_input =
|
||||
ScriptableRenderPassInput.None;
|
||||
|
||||
protected ScriptableRenderPass()
|
||||
{
|
||||
@@ -20,6 +24,31 @@ namespace XCEngine.Rendering.Universal
|
||||
public RenderPassEvent renderPassEvent { get; set; } =
|
||||
RenderPassEvent.BeforeRenderingOpaques;
|
||||
|
||||
public ScriptableRenderPassInput input
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_input;
|
||||
}
|
||||
}
|
||||
|
||||
public bool requiresIntermediateTexture
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_input != ScriptableRenderPassInput.None;
|
||||
}
|
||||
}
|
||||
|
||||
protected ProfilingSampler profilingSampler { get; set; } =
|
||||
new ProfilingSampler("Unnamed_ScriptableRenderPass");
|
||||
|
||||
public void ConfigureInput(
|
||||
ScriptableRenderPassInput passInput)
|
||||
{
|
||||
m_input = passInput;
|
||||
}
|
||||
|
||||
public virtual bool SupportsStage(
|
||||
CameraFrameStage stage)
|
||||
{
|
||||
@@ -44,14 +73,80 @@ namespace XCEngine.Rendering.Universal
|
||||
ScriptableRenderContext context,
|
||||
RenderingData renderingData)
|
||||
{
|
||||
return RecordRenderGraph(
|
||||
context,
|
||||
renderingData);
|
||||
RenderingData passRenderingData =
|
||||
renderingData;
|
||||
OnCameraSetup(
|
||||
m_lifecycleCommandBuffer,
|
||||
ref passRenderingData);
|
||||
|
||||
try
|
||||
{
|
||||
return RecordRenderGraph(
|
||||
context,
|
||||
passRenderingData);
|
||||
}
|
||||
finally
|
||||
{
|
||||
OnCameraCleanup(
|
||||
m_lifecycleCommandBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract bool RecordRenderGraph(
|
||||
public virtual void Execute(
|
||||
ScriptableRenderContext context,
|
||||
RenderingData renderingData);
|
||||
ref RenderingData renderingData)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OnCameraSetup(
|
||||
CommandBuffer cmd,
|
||||
ref RenderingData renderingData)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OnCameraCleanup(
|
||||
CommandBuffer cmd)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OnFinishCameraStackRendering(
|
||||
CommandBuffer cmd)
|
||||
{
|
||||
}
|
||||
|
||||
protected virtual bool RecordRenderGraph(
|
||||
ScriptableRenderContext context,
|
||||
RenderingData renderingData)
|
||||
{
|
||||
if (context == null ||
|
||||
renderingData == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Execute(
|
||||
context,
|
||||
ref renderingData);
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool operator >(
|
||||
ScriptableRenderPass lhs,
|
||||
ScriptableRenderPass rhs)
|
||||
{
|
||||
return CompareRenderPassEvents(
|
||||
lhs,
|
||||
rhs) > 0;
|
||||
}
|
||||
|
||||
public static bool operator <(
|
||||
ScriptableRenderPass lhs,
|
||||
ScriptableRenderPass rhs)
|
||||
{
|
||||
return CompareRenderPassEvents(
|
||||
lhs,
|
||||
rhs) < 0;
|
||||
}
|
||||
|
||||
protected bool RecordColorScaleFullscreenPass(
|
||||
ScriptableRenderContext context,
|
||||
@@ -248,6 +343,10 @@ namespace XCEngine.Rendering.Universal
|
||||
case RenderPassEvent.AfterRenderingPrePasses:
|
||||
block = RendererBlock.DepthPrepass;
|
||||
return true;
|
||||
case RenderPassEvent.BeforeRenderingGbuffer:
|
||||
case RenderPassEvent.AfterRenderingGbuffer:
|
||||
case RenderPassEvent.BeforeRenderingDeferredLights:
|
||||
case RenderPassEvent.AfterRenderingDeferredLights:
|
||||
case RenderPassEvent.BeforeRenderingOpaques:
|
||||
case RenderPassEvent.RenderOpaques:
|
||||
case RenderPassEvent.AfterRenderingOpaques:
|
||||
@@ -268,6 +367,7 @@ namespace XCEngine.Rendering.Universal
|
||||
block = RendererBlock.PostProcess;
|
||||
return true;
|
||||
case RenderPassEvent.BeforeRenderingFinalOutput:
|
||||
case RenderPassEvent.AfterRendering:
|
||||
case RenderPassEvent.AfterRenderingFinalOutput:
|
||||
block = RendererBlock.FinalOutput;
|
||||
return true;
|
||||
@@ -277,6 +377,31 @@ namespace XCEngine.Rendering.Universal
|
||||
}
|
||||
}
|
||||
|
||||
private static int CompareRenderPassEvents(
|
||||
ScriptableRenderPass lhs,
|
||||
ScriptableRenderPass rhs)
|
||||
{
|
||||
if (ReferenceEquals(
|
||||
lhs,
|
||||
rhs))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (lhs == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rhs == null)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
return lhs.renderPassEvent.CompareTo(
|
||||
rhs.renderPassEvent);
|
||||
}
|
||||
|
||||
private static bool TryResolveDefaultFullscreenTargets(
|
||||
ScriptableRenderContext context,
|
||||
out RenderGraphTextureHandle sourceColor,
|
||||
|
||||
Reference in New Issue
Block a user