- carry MeshRenderer renderLayer through scene extraction into VisibleRenderItem - extend native and managed FilteringSettings with renderLayerMask support - let RenderObjectsRendererFeature author layer-filtered object draws
103 lines
2.9 KiB
C#
103 lines
2.9 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 bool overrideFilteringSettings;
|
|
public FilteringSettings filteringSettings;
|
|
public bool overrideSortingSettings;
|
|
public SortingSettings sortingSettings;
|
|
|
|
public override void Create()
|
|
{
|
|
RendererListDesc rendererListDesc =
|
|
BuildRendererListDesc();
|
|
if (m_pass == null)
|
|
{
|
|
m_pass =
|
|
new DrawObjectsPass(
|
|
passEvent,
|
|
scenePhase,
|
|
rendererListDesc);
|
|
return;
|
|
}
|
|
|
|
m_pass.Configure(
|
|
passEvent,
|
|
scenePhase,
|
|
rendererListDesc);
|
|
}
|
|
|
|
public override void AddRenderPasses(
|
|
ScriptableRenderer renderer,
|
|
RenderingData renderingData)
|
|
{
|
|
if (renderer == null ||
|
|
renderingData == null ||
|
|
!renderingData.isMainSceneStage)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (m_pass == null)
|
|
{
|
|
Create();
|
|
}
|
|
|
|
m_pass.Configure(
|
|
passEvent,
|
|
scenePhase,
|
|
BuildRendererListDesc());
|
|
renderer.EnqueuePass(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;
|
|
}
|
|
}
|
|
}
|