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 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 (overrideSortingSettings) { rendererListDesc.sorting = sortingSettings; } return rendererListDesc; } } }