|
|
|
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Diagnostics; |
|
|
|
using UnityEngine.Rendering; |
|
|
|
using UnityEngine.Rendering.PostProcessing; |
|
|
|
using UnityEngine.XR; |
|
|
|
|
|
|
private ShadowSettings m_ShadowSettings = ShadowSettings.Default; |
|
|
|
private ShadowSliceData[] m_ShadowSlices = new ShadowSliceData[kMaxCascades]; |
|
|
|
|
|
|
|
// Pipeline pass names
|
|
|
|
private static readonly ShaderPassName m_UnlitPassName = new ShaderPassName("SRPDefaultUnlit"); |
|
|
|
private static readonly ShaderPassName m_UnlitPassName = new ShaderPassName("SRPDefaultUnlit"); // Renders all shaders without a lightmode tag
|
|
|
|
|
|
|
|
// Legacy pass names
|
|
|
|
public static readonly ShaderPassName s_AlwaysName = new ShaderPassName("Always"); |
|
|
|
public static readonly ShaderPassName s_ForwardBaseName = new ShaderPassName("ForwardBase"); |
|
|
|
public static readonly ShaderPassName s_PrepassBaseName = new ShaderPassName("PrepassBase"); |
|
|
|
public static readonly ShaderPassName s_VertexName = new ShaderPassName("Vertex"); |
|
|
|
public static readonly ShaderPassName s_VertexLMRGBMName = new ShaderPassName("VertexLMRGBM"); |
|
|
|
public static readonly ShaderPassName s_VertexLMName = new ShaderPassName("VertexLM"); |
|
|
|
public static readonly ShaderPassName[] s_LegacyPassNames = |
|
|
|
{ |
|
|
|
s_AlwaysName, s_ForwardBaseName, s_PrepassBaseName, s_VertexName, s_VertexLMRGBMName, s_VertexLMName |
|
|
|
}; |
|
|
|
|
|
|
|
private RenderTextureFormat m_ColorFormat; |
|
|
|
private PostProcessRenderContext m_PostProcessRenderContext; |
|
|
|
|
|
|
private Mesh m_BlitQuad; |
|
|
|
private Material m_BlitMaterial; |
|
|
|
private Material m_CopyDepthMaterial; |
|
|
|
private Material m_ErrorMaterial; |
|
|
|
private int m_BlitTexID = Shader.PropertyToID("_BlitTex"); |
|
|
|
|
|
|
|
private CopyTextureSupport m_CopyTextureSupport; |
|
|
|
|
|
|
m_BlitQuad = LightweightUtils.CreateQuadMesh(false); |
|
|
|
m_BlitMaterial = CoreUtils.CreateEngineMaterial(m_Asset.BlitShader); |
|
|
|
m_CopyDepthMaterial = CoreUtils.CreateEngineMaterial(m_Asset.CopyDepthShader); |
|
|
|
m_ErrorMaterial = CoreUtils.CreateEngineMaterial("Hidden/InternalErrorShader"); |
|
|
|
} |
|
|
|
|
|
|
|
public override void Dispose() |
|
|
|
|
|
|
|
|
|
|
CoreUtils.Destroy(m_ErrorMaterial); |
|
|
|
CoreUtils.Destroy(m_CopyDepthMaterial); |
|
|
|
CoreUtils.Destroy(m_BlitMaterial); |
|
|
|
} |
|
|
|
|
|
|
|
CullResults m_CullResults; |
|
|
|
|
|
|
|
|
|
|
context.DrawRenderers(m_CullResults.visibleRenderers, ref opaqueDrawSettings, opaqueFilterSettings); |
|
|
|
|
|
|
|
// Render objects that did not match any shader pass with error shader
|
|
|
|
RenderObjectsWithError(ref context, opaqueFilterSettings, SortFlags.None); |
|
|
|
|
|
|
|
if (m_CurrCamera.clearFlags == CameraClearFlags.Skybox) |
|
|
|
context.DrawSkybox(m_CurrCamera); |
|
|
|
} |
|
|
|
|
|
|
CommandBufferPool.Release(cmd); |
|
|
|
} |
|
|
|
|
|
|
|
private void RenderTransparents(ref ScriptableRenderContext context, RendererConfiguration config) |
|
|
|
{ |
|
|
|
var transparentSettings = new DrawRendererSettings(m_CurrCamera, m_LitPassName); |
|
|
|
transparentSettings.SetShaderPassName(1, m_UnlitPassName); |
|
|
|
transparentSettings.sorting.flags = SortFlags.CommonTransparent; |
|
|
|
transparentSettings.rendererConfiguration = config; |
|
|
|
|
|
|
|
var transparentFilterSettings = new FilterRenderersSettings(true) |
|
|
|
{ |
|
|
|
renderQueueRange = RenderQueueRange.transparent |
|
|
|
}; |
|
|
|
|
|
|
|
context.DrawRenderers(m_CullResults.visibleRenderers, ref transparentSettings, transparentFilterSettings); |
|
|
|
|
|
|
|
// Render objects that did not match any shader pass with error shader
|
|
|
|
RenderObjectsWithError(ref context, transparentFilterSettings, SortFlags.None); |
|
|
|
} |
|
|
|
|
|
|
|
private void AfterTransparent(ref ScriptableRenderContext context, FrameRenderingConfiguration config) |
|
|
|
{ |
|
|
|
if (!LightweightUtils.HasFlag(config, FrameRenderingConfiguration.PostProcess)) |
|
|
|
|
|
|
CommandBufferPool.Release(cmd); |
|
|
|
} |
|
|
|
|
|
|
|
private void RenderTransparents(ref ScriptableRenderContext context, RendererConfiguration config) |
|
|
|
[Conditional("DEVELOPMENT_BUILD"), Conditional("UNITY_EDITOR")] |
|
|
|
private void RenderObjectsWithError(ref ScriptableRenderContext context, FilterRenderersSettings filterSettings, SortFlags sortFlags) |
|
|
|
var transparentSettings = new DrawRendererSettings(m_CurrCamera, m_LitPassName); |
|
|
|
transparentSettings.SetShaderPassName(1, m_UnlitPassName); |
|
|
|
transparentSettings.sorting.flags = SortFlags.CommonTransparent; |
|
|
|
transparentSettings.rendererConfiguration = config; |
|
|
|
|
|
|
|
var transparentFilterSettings = new FilterRenderersSettings(true) |
|
|
|
if (m_ErrorMaterial != null) |
|
|
|
renderQueueRange = RenderQueueRange.transparent |
|
|
|
}; |
|
|
|
DrawRendererSettings errorSettings = new DrawRendererSettings(m_CurrCamera, s_LegacyPassNames[0]); |
|
|
|
for (int i = 1; i < s_LegacyPassNames.Length; ++i) |
|
|
|
errorSettings.SetShaderPassName(i, s_LegacyPassNames[i]); |
|
|
|
context.DrawRenderers(m_CullResults.visibleRenderers, ref transparentSettings, transparentFilterSettings); |
|
|
|
errorSettings.sorting.flags = sortFlags; |
|
|
|
errorSettings.rendererConfiguration = RendererConfiguration.None; |
|
|
|
errorSettings.SetOverrideMaterial(m_ErrorMaterial, 0); |
|
|
|
context.DrawRenderers(m_CullResults.visibleRenderers, ref errorSettings, filterSettings); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void BuildShadowSettings() |
|
|
|