using System; using System.Collections.Generic; using System.Diagnostics; using UnityEngine.Scripting.APIUpdating; namespace UnityEngine.Rendering.Universal { /// /// Contains properties and helper functions that you can use when rendering. /// [MovedFrom("UnityEngine.Rendering.LWRP")] public static class RenderingUtils { static List m_LegacyShaderPassNames = new List() { new ShaderTagId("Always"), new ShaderTagId("ForwardBase"), new ShaderTagId("PrepassBase"), new ShaderTagId("Vertex"), new ShaderTagId("VertexLMRGBM"), new ShaderTagId("VertexLM"), }; static Mesh s_FullscreenMesh = null; /// /// Returns a mesh that you can use with to render full-screen effects. /// public static Mesh fullscreenMesh { get { if (s_FullscreenMesh != null) return s_FullscreenMesh; float topV = 1.0f; float bottomV = 0.0f; s_FullscreenMesh = new Mesh { name = "Fullscreen Quad" }; s_FullscreenMesh.SetVertices(new List { new Vector3(-1.0f, -1.0f, 0.0f), new Vector3(-1.0f, 1.0f, 0.0f), new Vector3(1.0f, -1.0f, 0.0f), new Vector3(1.0f, 1.0f, 0.0f) }); s_FullscreenMesh.SetUVs(0, new List { new Vector2(0.0f, bottomV), new Vector2(0.0f, topV), new Vector2(1.0f, bottomV), new Vector2(1.0f, topV) }); s_FullscreenMesh.SetIndices(new[] { 0, 1, 2, 2, 1, 3 }, MeshTopology.Triangles, 0, false); s_FullscreenMesh.UploadMeshData(true); return s_FullscreenMesh; } } #if POST_PROCESSING_STACK_2_0_0_OR_NEWER [Obsolete("The use of the Post-processing Stack V2 is deprecated in the Universal Render Pipeline. Use the builtin post-processing effects instead.")] public static UnityEngine.Rendering.PostProcessing.PostProcessRenderContext postProcessRenderContext => null; #endif internal static bool useStructuredBuffer { // There are some performance issues with StructuredBuffers in some platforms. // We fallback to UBO in those cases. get { // TODO: For now disabling SSBO until figure out Vulkan binding issues. // When enabling this also enable it in shader side in Input.hlsl return false; // We don't use SSBO in D3D because we can't figure out without adding shader variants if platforms is D3D10. //GraphicsDeviceType deviceType = SystemInfo.graphicsDeviceType; //return !Application.isMobilePlatform && // (deviceType == GraphicsDeviceType.Metal || deviceType == GraphicsDeviceType.Vulkan || // deviceType == GraphicsDeviceType.PlayStation4 || deviceType == GraphicsDeviceType.XboxOne); } } static Material s_ErrorMaterial; static Material errorMaterial { get { if (s_ErrorMaterial == null) s_ErrorMaterial = new Material(Shader.Find("Hidden/InternalErrorShader")); return s_ErrorMaterial; } } [Conditional("DEVELOPMENT_BUILD"), Conditional("UNITY_EDITOR")] internal static void RenderObjectsWithError(ScriptableRenderContext context, ref CullingResults cullResults, Camera camera, FilteringSettings filterSettings, SortingCriteria sortFlags) { SortingSettings sortingSettings = new SortingSettings(camera) { criteria = sortFlags }; DrawingSettings errorSettings = new DrawingSettings(m_LegacyShaderPassNames[0], sortingSettings) { perObjectData = PerObjectData.None, overrideMaterial = errorMaterial, overrideMaterialPassIndex = 0 }; for (int i = 1; i < m_LegacyShaderPassNames.Count; ++i) errorSettings.SetShaderPassName(i, m_LegacyShaderPassNames[i]); context.DrawRenderers(cullResults, ref errorSettings, ref filterSettings); } // Caches render texture format support. SystemInfo.SupportsRenderTextureFormat allocates memory due to boxing. static Dictionary m_RenderTextureFormatSupport = new Dictionary(); internal static void ClearSystemInfoCache() { m_RenderTextureFormatSupport.Clear(); } /// /// Checks if a render texture format is supported by the run-time system. /// Similar to , but doesn't allocate memory. /// /// The format to look up. /// Returns true if the graphics card supports the given RenderTextureFormat public static bool SupportsRenderTextureFormat(RenderTextureFormat format) { if (!m_RenderTextureFormatSupport.TryGetValue(format, out var support)) { support = SystemInfo.SupportsRenderTextureFormat(format); m_RenderTextureFormatSupport.Add(format, support); } return support; } } }