123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- 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);
- }
- }
- }
|