Files
XCEngine/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderer.cs

89 lines
2.7 KiB
C#

using XCEngine;
using XCEngine.Rendering;
namespace XCEngine.Rendering.Universal
{
public sealed class UniversalRenderer : ScriptableRenderer
{
private readonly UniversalRendererData m_rendererData;
private readonly DrawObjectsPass m_drawOpaqueObjectsPass =
new DrawObjectsPass(
RenderPassEvent.RenderOpaques,
SceneRenderPhase.Opaque,
RendererListDesc.CreateDefault(
RendererListType.Opaque));
private readonly DrawSkyboxPass m_drawSkyboxPass =
new DrawSkyboxPass();
private readonly DrawObjectsPass m_drawTransparentObjectsPass =
new DrawObjectsPass(
RenderPassEvent.RenderTransparents,
SceneRenderPhase.Transparent,
RendererListDesc.CreateDefault(
RendererListType.Transparent));
public UniversalRenderer(
UniversalRendererData rendererData)
{
m_rendererData =
rendererData ?? new UniversalRendererData();
}
protected override void AddRenderPasses(
RenderingData renderingData)
{
if (renderingData == null)
{
return;
}
UniversalMainSceneData mainScene =
m_rendererData.GetMainSceneInstance();
if (mainScene.renderOpaque)
{
EnqueueOpaquePasses(mainScene);
}
if (mainScene.renderSkybox)
{
EnqueueSkyboxPasses(mainScene);
}
if (mainScene.renderTransparent)
{
EnqueueTransparentPasses(mainScene);
}
}
private void EnqueueOpaquePasses(
UniversalMainSceneData mainScene)
{
m_drawOpaqueObjectsPass.Configure(
mainScene.opaquePassEvent,
SceneRenderPhase.Opaque,
mainScene.opaqueRendererListDesc,
mainScene.opaqueDrawingSettings);
EnqueuePass(m_drawOpaqueObjectsPass);
}
private void EnqueueSkyboxPasses(
UniversalMainSceneData mainScene)
{
m_drawSkyboxPass.Configure(
mainScene.skyboxPassEvent);
EnqueuePass(m_drawSkyboxPass);
}
private void EnqueueTransparentPasses(
UniversalMainSceneData mainScene)
{
m_drawTransparentObjectsPass.Configure(
mainScene.transparentPassEvent,
SceneRenderPhase.Transparent,
mainScene.transparentRendererListDesc,
mainScene.transparentDrawingSettings);
EnqueuePass(m_drawTransparentObjectsPass);
}
}
}