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 overrideFilteringSettings; public FilteringSettings filteringSettings; public bool overrideSortingSettings; public SortingSettings sortingSettings; 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 || !renderingData.isMainSceneStage) { return; } if (m_pass == null) { Create(); } m_pass.Configure( passEvent, scenePhase, BuildRendererListDesc(), BuildDrawingSettings()); 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; } private DrawingSettings BuildDrawingSettings() { DrawingSettings drawingSettings = DrawingSettings.CreateDefault(); drawingSettings.overrideMaterialPath = overrideMaterialPath ?? string.Empty; drawingSettings.shaderPassName = shaderPassName ?? string.Empty; return drawingSettings; } } }