194 lines
6.0 KiB
C#
194 lines
6.0 KiB
C#
using XCEngine;
|
|
using XCEngine.Rendering;
|
|
|
|
namespace XCEngine.Rendering.Universal
|
|
{
|
|
public sealed class RenderObjectsRendererFeature
|
|
: ScriptableRendererFeature
|
|
{
|
|
private DrawObjectsPass m_pass;
|
|
|
|
public RenderPassEvent passEvent =
|
|
RenderPassEvent.AfterRenderingOpaques;
|
|
public SceneRenderPhase scenePhase =
|
|
SceneRenderPhase.Opaque;
|
|
public RendererListType rendererListType =
|
|
RendererListType.Opaque;
|
|
public bool overrideRenderQueueRange;
|
|
public RenderQueueRange renderQueueRange =
|
|
RenderQueueRange.Opaque;
|
|
public bool overrideRenderLayerMask;
|
|
public uint renderLayerMask = uint.MaxValue;
|
|
public string overrideMaterialPath = string.Empty;
|
|
public string shaderPassName = string.Empty;
|
|
public bool overrideRenderStateBlock;
|
|
public RenderStateBlock renderStateBlock;
|
|
public bool overrideFilteringSettings;
|
|
public FilteringSettings filteringSettings;
|
|
public bool overrideSortingSettings;
|
|
public SortingSettings sortingSettings;
|
|
|
|
protected override int ComputeRuntimeStateHash()
|
|
{
|
|
int hash =
|
|
base.ComputeRuntimeStateHash();
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
(int)passEvent);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
(int)scenePhase);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
(int)rendererListType);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
overrideRenderQueueRange);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
renderQueueRange);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
overrideRenderLayerMask);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
renderLayerMask);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
overrideMaterialPath);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
shaderPassName);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
overrideRenderStateBlock);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
renderStateBlock);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
overrideFilteringSettings);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
filteringSettings);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
overrideSortingSettings);
|
|
hash =
|
|
RuntimeStateHashUtility.Combine(
|
|
hash,
|
|
sortingSettings);
|
|
return hash;
|
|
}
|
|
|
|
public override void Create()
|
|
{
|
|
RendererListDesc rendererListDesc =
|
|
BuildRendererListDesc();
|
|
DrawingSettings drawingSettings =
|
|
BuildDrawingSettings();
|
|
if (m_pass == null)
|
|
{
|
|
m_pass =
|
|
new DrawObjectsPass(
|
|
passEvent,
|
|
scenePhase,
|
|
rendererListDesc,
|
|
drawingSettings);
|
|
return;
|
|
}
|
|
|
|
m_pass.Configure(
|
|
passEvent,
|
|
scenePhase,
|
|
rendererListDesc,
|
|
drawingSettings);
|
|
}
|
|
|
|
public override void AddRenderPasses(
|
|
ScriptableRenderer renderer,
|
|
RenderingData renderingData)
|
|
{
|
|
if (renderer == null ||
|
|
renderingData == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
CreateInstance();
|
|
|
|
m_pass.Configure(
|
|
passEvent,
|
|
scenePhase,
|
|
BuildRendererListDesc(),
|
|
BuildDrawingSettings());
|
|
UniversalMainSceneFeatureUtility.EnqueuePass(
|
|
renderer,
|
|
renderingData,
|
|
m_pass);
|
|
}
|
|
|
|
private RendererListDesc BuildRendererListDesc()
|
|
{
|
|
RendererListDesc rendererListDesc =
|
|
RendererListDesc.CreateDefault(
|
|
rendererListType);
|
|
if (overrideFilteringSettings)
|
|
{
|
|
rendererListDesc.filtering =
|
|
filteringSettings;
|
|
}
|
|
|
|
if (overrideRenderQueueRange)
|
|
{
|
|
rendererListDesc.filtering.renderQueueRange =
|
|
renderQueueRange;
|
|
}
|
|
|
|
if (overrideRenderLayerMask)
|
|
{
|
|
rendererListDesc.filtering.renderLayerMask =
|
|
renderLayerMask;
|
|
}
|
|
|
|
if (overrideSortingSettings)
|
|
{
|
|
rendererListDesc.sorting =
|
|
sortingSettings;
|
|
}
|
|
|
|
return rendererListDesc;
|
|
}
|
|
|
|
private DrawingSettings BuildDrawingSettings()
|
|
{
|
|
DrawingSettings drawingSettings =
|
|
DrawingSettings.CreateDefault();
|
|
drawingSettings.overrideMaterialPath =
|
|
overrideMaterialPath ?? string.Empty;
|
|
drawingSettings.shaderPassName =
|
|
shaderPassName ?? string.Empty;
|
|
if (overrideRenderStateBlock)
|
|
{
|
|
drawingSettings.renderStateBlock =
|
|
renderStateBlock;
|
|
}
|
|
return drawingSettings;
|
|
}
|
|
}
|
|
}
|