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

195 lines
5.8 KiB
C#

using System;
using XCEngine;
using XCEngine.Rendering;
namespace XCEngine.Rendering.Universal
{
public class UniversalRendererData : ScriptableRendererData
{
public UniversalMainSceneData mainScene;
public ShadowCasterBlockData shadowCaster;
public DepthPrepassBlockData depthPrepass;
public UniversalRendererData()
: this(true)
{
}
protected UniversalRendererData(
bool initializeDefaultRendererFeatures)
{
mainScene = UniversalMainSceneData.CreateDefault();
shadowCaster = ShadowCasterBlockData.CreateDefault();
depthPrepass = DepthPrepassBlockData.CreateDefault();
if (initializeDefaultRendererFeatures)
{
ResetRendererFeaturesToDefault();
}
}
protected override ScriptableRenderer CreateRenderer()
{
return new UniversalRenderer(this);
}
protected override int ComputeRuntimeStateHash()
{
int hash =
base.ComputeRuntimeStateHash();
hash =
AppendMainSceneRuntimeStateHash(
hash,
GetMainSceneInstance());
hash =
AppendShadowCasterRuntimeStateHash(
hash,
GetShadowCasterBlockInstance());
hash =
AppendDepthPrepassRuntimeStateHash(
hash,
GetDepthPrepassBlockInstance());
return hash;
}
protected override ScriptableRendererFeature[]
CreateDefaultRendererFeatures()
{
return UniversalDefaultRendererFeatureFactory
.CreateDefaultRendererFeatures();
}
internal UniversalMainSceneData GetMainSceneInstance()
{
if (mainScene == null)
{
mainScene =
UniversalMainSceneData.CreateDefault();
}
return mainScene;
}
internal ShadowCasterBlockData GetShadowCasterBlockInstance()
{
if (shadowCaster == null)
{
shadowCaster =
ShadowCasterBlockData.CreateDefault();
}
return shadowCaster;
}
internal DepthPrepassBlockData GetDepthPrepassBlockInstance()
{
if (depthPrepass == null)
{
depthPrepass =
DepthPrepassBlockData.CreateDefault();
}
return depthPrepass;
}
private static int AppendMainSceneRuntimeStateHash(
int hash,
UniversalMainSceneData data)
{
hash = RuntimeStateHashUtility.Combine(hash, data != null);
if (data == null)
{
return hash;
}
hash = RuntimeStateHashUtility.Combine(hash, data.renderOpaque);
hash =
RuntimeStateHashUtility.Combine(
hash,
(int)data.opaquePassEvent);
hash =
RuntimeStateHashUtility.Combine(
hash,
data.opaqueRendererListDesc);
hash =
RuntimeStateHashUtility.Combine(
hash,
data.opaqueDrawingSettings);
hash = RuntimeStateHashUtility.Combine(hash, data.renderSkybox);
hash =
RuntimeStateHashUtility.Combine(
hash,
(int)data.skyboxPassEvent);
hash =
RuntimeStateHashUtility.Combine(
hash,
data.renderTransparent);
hash =
RuntimeStateHashUtility.Combine(
hash,
(int)data.transparentPassEvent);
hash =
RuntimeStateHashUtility.Combine(
hash,
data.transparentRendererListDesc);
hash =
RuntimeStateHashUtility.Combine(
hash,
data.transparentDrawingSettings);
return hash;
}
private static int AppendShadowCasterRuntimeStateHash(
int hash,
ShadowCasterBlockData data)
{
hash = RuntimeStateHashUtility.Combine(hash, data != null);
if (data == null)
{
return hash;
}
hash = RuntimeStateHashUtility.Combine(hash, data.enabled);
hash =
RuntimeStateHashUtility.Combine(
hash,
(int)data.passEvent);
hash =
RuntimeStateHashUtility.Combine(
hash,
data.rendererListDesc);
hash =
RuntimeStateHashUtility.Combine(
hash,
data.drawingSettings);
return hash;
}
private static int AppendDepthPrepassRuntimeStateHash(
int hash,
DepthPrepassBlockData data)
{
hash = RuntimeStateHashUtility.Combine(hash, data != null);
if (data == null)
{
return hash;
}
hash = RuntimeStateHashUtility.Combine(hash, data.enabled);
hash =
RuntimeStateHashUtility.Combine(
hash,
(int)data.passEvent);
hash =
RuntimeStateHashUtility.Combine(
hash,
data.rendererListDesc);
hash =
RuntimeStateHashUtility.Combine(
hash,
data.drawingSettings);
return hash;
}
}
}