89 lines
2.7 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|