Tanoda
ReverseUV.cs
Go to the documentation of this file.
1using UnityEngine;
2
4{
8 public static class ReverseUV
9 {
10 #region PrivateField
11
12 private const string REVERSE_UV_MATERIAL = "Es.InkPainter.Effective.ReverseUV";
13 private const string REVERSE_X = "_ReverseX";
14 private const string REVERSE_Y = "_ReverseY";
15
16 private const float DEFAULT = 1f;
17 private const float REVERSE = 0f;
18
19 private static Material reverseUVMaterial;
20
21 #endregion PrivateField
22
23 #region PublicMethod
24
30 public static void Horizontal(Texture src, RenderTexture dst)
31 {
32 if (reverseUVMaterial == null)
33 InitReverseUVMaterial();
34 SetReverseUVProperty(REVERSE, DEFAULT);
35 Blit(src, dst);
36 }
37
43 public static void Vertical(Texture src, RenderTexture dst)
44 {
45 if (reverseUVMaterial == null)
46 InitReverseUVMaterial();
47 SetReverseUVProperty(DEFAULT, REVERSE);
48 Blit(src, dst);
49 }
50
56 public static void HorizontalAndVertical(Texture src, RenderTexture dst)
57 {
58 if (reverseUVMaterial == null)
59 InitReverseUVMaterial();
60 SetReverseUVProperty(REVERSE, REVERSE);
61 Blit(src, dst);
62 }
63
64 #endregion PublicMethod
65
66 #region PrivateField
67
71 private static void InitReverseUVMaterial()
72 {
73 reverseUVMaterial = new Material(Resources.Load<Material>(REVERSE_UV_MATERIAL));
74 }
75
76 private static void SetReverseUVProperty(float x, float y)
77 {
78 reverseUVMaterial.SetFloat(REVERSE_X, x);
79 reverseUVMaterial.SetFloat(REVERSE_Y, y);
80 }
81
82 private static void Blit(Texture src, RenderTexture dst)
83 {
84 var tmp = RenderTexture.GetTemporary(src.width, src.height, 0);
85 Graphics.Blit(src, tmp, reverseUVMaterial);
86 Graphics.Blit(tmp, dst);
87 RenderTexture.ReleaseTemporary(tmp);
88 }
89
90 #endregion PrivateField
91 }
92}