namespace UnityEngine.PostProcessing { public static class GraphicsUtils { private static Mesh s_Quad; public static bool isLinearColorSpace { get { return QualitySettings.activeColorSpace == ColorSpace.Linear; } } public static bool supportsDX11 { get { return SystemInfo.graphicsShaderLevel >= 50 && SystemInfo.supportsComputeShaders; } } public static Mesh quad { get { if (s_Quad != null) { return s_Quad; } Vector3[] vertices = new Vector3[4] { new Vector3(-1f, -1f, 0f), new Vector3(1f, 1f, 0f), new Vector3(1f, -1f, 0f), new Vector3(-1f, 1f, 0f) }; Vector2[] uv = new Vector2[4] { new Vector2(0f, 0f), new Vector2(1f, 1f), new Vector2(1f, 0f), new Vector2(0f, 1f) }; int[] triangles = new int[6] { 0, 1, 2, 1, 0, 3 }; Mesh mesh = new Mesh(); mesh.vertices = vertices; mesh.uv = uv; mesh.triangles = triangles; s_Quad = mesh; s_Quad.RecalculateNormals(); s_Quad.RecalculateBounds(); return s_Quad; } } public static void Blit(Material material, int pass) { GL.PushMatrix(); GL.LoadOrtho(); material.SetPass(pass); GL.Begin(5); GL.TexCoord2(0f, 0f); GL.Vertex3(0f, 0f, 0.1f); GL.TexCoord2(1f, 0f); GL.Vertex3(1f, 0f, 0.1f); GL.TexCoord2(0f, 1f); GL.Vertex3(0f, 1f, 0.1f); GL.TexCoord2(1f, 1f); GL.Vertex3(1f, 1f, 0.1f); GL.End(); GL.PopMatrix(); } public static void ClearAndBlit(Texture source, RenderTexture destination, Material material, int pass, bool clearColor = true, bool clearDepth = false) { RenderTexture active = RenderTexture.active; RenderTexture.active = destination; GL.Clear(false, clearColor, Color.clear); GL.PushMatrix(); GL.LoadOrtho(); material.SetTexture("_MainTex", source); material.SetPass(pass); GL.Begin(5); GL.TexCoord2(0f, 0f); GL.Vertex3(0f, 0f, 0.1f); GL.TexCoord2(1f, 0f); GL.Vertex3(1f, 0f, 0.1f); GL.TexCoord2(0f, 1f); GL.Vertex3(0f, 1f, 0.1f); GL.TexCoord2(1f, 1f); GL.Vertex3(1f, 1f, 0.1f); GL.End(); GL.PopMatrix(); RenderTexture.active = active; } public static void Destroy(Object obj) { if (obj != null) { Object.Destroy(obj); } } public static void Dispose() { Destroy(s_Quad); } } }