195 lines
5.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
|