| namespace UnityEngine.PostProcessing | 
| { | 
|     using UnityObject = Object; | 
|   | 
|     public static class GraphicsUtils | 
|     { | 
|         public static bool isLinearColorSpace | 
|         { | 
|             get { return QualitySettings.activeColorSpace == ColorSpace.Linear; } | 
|         } | 
|   | 
|         public static bool supportsDX11 | 
|         { | 
| #if UNITY_WEBGL | 
|             get { return false; } | 
| #else | 
|             get { return SystemInfo.graphicsShaderLevel >= 50 && SystemInfo.supportsComputeShaders; } | 
| #endif | 
|         } | 
|   | 
|         static Texture2D s_WhiteTexture; | 
|         public static Texture2D whiteTexture | 
|         { | 
|             get | 
|             { | 
|                 if (s_WhiteTexture != null) | 
|                     return s_WhiteTexture; | 
|   | 
|                 s_WhiteTexture = new Texture2D(1, 1, TextureFormat.ARGB32, false); | 
|                 s_WhiteTexture.SetPixel(0, 0, new Color(1f, 1f, 1f, 1f)); | 
|                 s_WhiteTexture.Apply(); | 
|   | 
|                 return s_WhiteTexture; | 
|             } | 
|         } | 
|   | 
|         static Mesh s_Quad; | 
|         public static Mesh quad | 
|         { | 
|             get | 
|             { | 
|                 if (s_Quad != null) | 
|                     return s_Quad; | 
|   | 
|                 var vertices = new[] | 
|                 { | 
|                     new Vector3(-1f, -1f, 0f), | 
|                     new Vector3( 1f,  1f, 0f), | 
|                     new Vector3( 1f, -1f, 0f), | 
|                     new Vector3(-1f,  1f, 0f) | 
|                 }; | 
|   | 
|                 var uvs = new[] | 
|                 { | 
|                     new Vector2(0f, 0f), | 
|                     new Vector2(1f, 1f), | 
|                     new Vector2(1f, 0f), | 
|                     new Vector2(0f, 1f) | 
|                 }; | 
|   | 
|                 var indices = new[] { 0, 1, 2, 1, 0, 3 }; | 
|   | 
|                 s_Quad = new Mesh | 
|                 { | 
|                     vertices = vertices, | 
|                     uv = uvs, | 
|                     triangles = indices | 
|                 }; | 
|                 s_Quad.RecalculateNormals(); | 
|                 s_Quad.RecalculateBounds(); | 
|   | 
|                 return s_Quad; | 
|             } | 
|         } | 
|   | 
|         // Useful when rendering to MRT | 
|         public static void Blit(Material material, int pass) | 
|         { | 
|             GL.PushMatrix(); | 
|             { | 
|                 GL.LoadOrtho(); | 
|   | 
|                 material.SetPass(pass); | 
|   | 
|                 GL.Begin(GL.TRIANGLE_STRIP); | 
|                 { | 
|                     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) | 
|         { | 
|             var oldRT = RenderTexture.active; | 
|             RenderTexture.active = destination; | 
|   | 
|             GL.Clear(false, clearColor, Color.clear); | 
|             GL.PushMatrix(); | 
|             { | 
|                 GL.LoadOrtho(); | 
|   | 
|                 material.SetTexture("_MainTex", source); | 
|                 material.SetPass(pass); | 
|   | 
|                 GL.Begin(GL.TRIANGLE_STRIP); | 
|                 { | 
|                     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 = oldRT; | 
|         } | 
|   | 
|         public static void Destroy(UnityObject obj) | 
|         { | 
|             if (obj != null) | 
|             { | 
| #if UNITY_EDITOR | 
|                 if (Application.isPlaying) | 
|                     UnityObject.Destroy(obj); | 
|                 else | 
|                     UnityObject.DestroyImmediate(obj); | 
| #else | 
|                 UnityObject.Destroy(obj); | 
| #endif | 
|             } | 
|         } | 
|   | 
|         public static void Dispose() | 
|         { | 
|             Destroy(s_Quad); | 
|         } | 
|     } | 
| } |