summaryrefslogtreecommitdiff
path: root/Client/Assets/Scripts/PostEffect/MobilePostEffectsBase.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Client/Assets/Scripts/PostEffect/MobilePostEffectsBase.cs')
-rw-r--r--Client/Assets/Scripts/PostEffect/MobilePostEffectsBase.cs214
1 files changed, 214 insertions, 0 deletions
diff --git a/Client/Assets/Scripts/PostEffect/MobilePostEffectsBase.cs b/Client/Assets/Scripts/PostEffect/MobilePostEffectsBase.cs
new file mode 100644
index 00000000..43c5e905
--- /dev/null
+++ b/Client/Assets/Scripts/PostEffect/MobilePostEffectsBase.cs
@@ -0,0 +1,214 @@
+using UnityEngine;
+using System.Collections;
+
+[ExecuteInEditMode]
+[RequireComponent(typeof(Camera))]
+public class MobilePostEffectsBase : MonoBehaviour
+{
+ protected bool supportHDRTextures = false;
+ protected bool isSupported = true;
+ protected void NotSupported()
+ {
+ enabled = false;
+ isSupported = false;
+ return;
+ }
+ protected Material CheckShaderAndCreateMaterial(Shader s, Material m2Create)
+ {
+ if (!s)
+ {
+ Debug.Log("Missing shader in " + this.ToString());
+ enabled = false;
+ return null;
+ }
+
+ if (s.isSupported && m2Create && m2Create.shader == s)
+ return m2Create;
+
+ if (!s.isSupported)
+ {
+ NotSupported();
+ Debug.Log("The shader " + s.ToString() + " on effect " + this.ToString() + " is not supported on this platform!");
+ return null;
+ }
+ else
+ {
+ m2Create = new Material(s);
+ m2Create.hideFlags = HideFlags.DontSave;
+ if (m2Create)
+ return m2Create;
+ else return null;
+ }
+ }
+ protected Material CreateMaterial(Shader s, Material m2Create)
+ {
+ if (!s)
+ {
+ Debug.Log("Missing shader in " + this.ToString());
+ return null;
+ }
+
+ if (m2Create && (m2Create.shader == s) && (s.isSupported))
+ return m2Create;
+
+ if (!s.isSupported)
+ {
+ return null;
+ }
+ else
+ {
+ m2Create = new Material(s);
+ m2Create.hideFlags = HideFlags.DontSave;
+ if (m2Create)
+ return m2Create;
+ else return null;
+ }
+ }
+ protected void OnEnable()
+ {
+ isSupported = true;
+ CheckResources();
+ }
+
+ protected bool CheckSupport()
+ {
+ return CheckSupport(false);
+ }
+
+ protected virtual bool CheckResources()
+ {
+ Debug.LogWarning("CheckResources () for " + this.ToString() + " should be overwritten.");
+ return isSupported;
+ }
+
+ protected bool CheckSupport(bool needDepth)
+ {
+ isSupported = true;
+ supportHDRTextures = SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.ARGBHalf);
+
+ if (!SystemInfo.supportsImageEffects) {
+ NotSupported ();
+ return false;
+ }
+
+ if(needDepth && !SystemInfo.SupportsRenderTextureFormat (RenderTextureFormat.Depth)) {
+ NotSupported ();
+ return false;
+ }
+
+ if(needDepth)
+ GetComponent<Camera>().depthTextureMode |= DepthTextureMode.Depth;
+
+ return true;
+ }
+
+ protected bool CheckSupport (bool needDepth,bool needHdr)
+ {
+ if(!CheckSupport(needDepth))
+ return false;
+
+ if(needHdr && !supportHDRTextures) {
+ NotSupported ();
+ return false;
+ }
+ return true;
+ }
+
+ protected bool CheckShader(Shader s)
+ {
+ Debug.Log("The shader " + s.ToString() + " on effect " + this.ToString() + " is not part of the Unity 3.2+ effects suite anymore. For best performance and quality, please ensure you are using the latest Standard Assets Image Effects (Pro only) package.");
+ if (!s.isSupported)
+ {
+ NotSupported();
+ return false;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ protected void DrawBorder (RenderTexture dest,Material material)
+ {
+ float x1;
+ float x2;
+ float y1;
+ float y2;
+
+ RenderTexture.active = dest;
+ bool invertY = true; // source.texelSize.y < 0.0f;
+ // Set up the simple Matrix
+ GL.PushMatrix();
+ GL.LoadOrtho();
+
+ for (int i = 0; i < material.passCount; i++)
+ {
+ material.SetPass(i);
+
+ float y1_;
+ float y2_;
+ if (invertY)
+ {
+ y1_ = 1.0f; y2_ = 0.0f;
+ }
+ else
+ {
+ y1_ = 0.0f; y2_ = 1.0f;
+ }
+
+ // left
+ x1 = 0.0f;
+ x2 = 0.0f + 1.0f/(dest.width*1.0f);
+ y1 = 0.0f;
+ y2 = 1.0f;
+ GL.Begin(GL.QUADS);
+
+ GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f);
+ GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f);
+ GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f);
+ GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f);
+
+ // right
+ x1 = 1.0f - 1.0f/(dest.width*1.0f);
+ x2 = 1.0f;
+ y1 = 0.0f;
+ y2 = 1.0f;
+
+ GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f);
+ GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f);
+ GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f);
+ GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f);
+
+ // top
+ x1 = 0.0f;
+ x2 = 1.0f;
+ y1 = 0.0f;
+ y2 = 0.0f + 1.0f/(dest.height*1.0f);
+
+ GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f);
+ GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f);
+ GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f);
+ GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f);
+
+ // bottom
+ x1 = 0.0f;
+ x2 = 1.0f;
+ y1 = 1.0f - 1.0f/(dest.height*1.0f);
+ y2 = 1.0f;
+
+ GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f);
+ GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f);
+ GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f);
+ GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f);
+
+ GL.End();
+ }
+
+ GL.PopMatrix();
+ }
+
+ // Use this for initialization
+ void Start () {
+
+ }
+}