From 54531a90f3d1e968e599c26d7f4d0eaa727a2d0b Mon Sep 17 00:00:00 2001 From: hecomi Date: Sat, 3 Dec 2016 21:18:12 +0900 Subject: [PATCH] add texture editor. --- .../Editor/TextureEditor.cs | 118 +++++++++ .../Editor/TextureEditor.cs.meta | 12 + Assets/uDesktopDuplication/Editor/Utils.cs | 46 ++++ .../uDesktopDuplication/Editor/Utils.cs.meta | 12 + .../Examples/Scenes/Primary Monitor.unity | Bin 14304 -> 14392 bytes .../Examples/Scenes/Shaders.unity | Bin 19840 -> 19856 bytes .../Scripts/MultipleMonitorCreator.cs | 2 +- .../Materials/uDD_Screen_Standard.mat | Bin 5152 -> 5244 bytes .../Materials/uDD_Screen_Unlit.mat | Bin 5296 -> 5312 bytes .../Materials/uDD_Screen_Unlit_BlackMask.mat | Bin 5160 -> 5252 bytes .../uDD_Screen_Unlit_Transparent.mat | Bin 5160 -> 5252 bytes Assets/uDesktopDuplication/Scripts/Texture.cs | 235 ++++++++++++------ .../Shaders/uDD_Standard.shader | 18 +- .../Shaders/uDD_Unlit_BlackMask.shader | 4 +- .../Shaders/uDD_Unlit_Transparent.shader | 4 +- 15 files changed, 365 insertions(+), 86 deletions(-) create mode 100644 Assets/uDesktopDuplication/Editor/TextureEditor.cs create mode 100644 Assets/uDesktopDuplication/Editor/TextureEditor.cs.meta create mode 100644 Assets/uDesktopDuplication/Editor/Utils.cs create mode 100644 Assets/uDesktopDuplication/Editor/Utils.cs.meta diff --git a/Assets/uDesktopDuplication/Editor/TextureEditor.cs b/Assets/uDesktopDuplication/Editor/TextureEditor.cs new file mode 100644 index 0000000..ca1cc43 --- /dev/null +++ b/Assets/uDesktopDuplication/Editor/TextureEditor.cs @@ -0,0 +1,118 @@ +using UnityEngine; +using UnityEditor; +using System.Linq; + +namespace uDesktopDuplication +{ + +[CustomEditor(typeof(Texture))] +public class TextureEditor : Editor +{ + Texture texture + { + get { return target as Texture; } + } + + Monitor monitor + { + get { return texture.monitor; } + } + + bool isAvailable + { + get { return monitor == null || !Application.isPlaying; } + } + + bool basicsFolded_ = true; + bool invertFolded_ = true; + bool clipFolded_ = true; + bool matFolded_ = true; + + SerializedProperty invertX_; + SerializedProperty invertY_; + SerializedProperty useClip_; + SerializedProperty clipPos_; + SerializedProperty clipScale_; + + void OnEnable() + { + invertX_ = serializedObject.FindProperty("invertX_"); + invertY_ = serializedObject.FindProperty("invertY_"); + useClip_ = serializedObject.FindProperty("useClip_"); + clipPos_ = serializedObject.FindProperty("clipPos"); + clipScale_ = serializedObject.FindProperty("clipScale"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUILayout.Space(); + DrawMonitor(); + DrawInvert(); + DrawClip(); + DrawMaterial(); + + serializedObject.ApplyModifiedProperties(); + } + + void Fold(string name, ref bool folded, System.Action func) + { + folded = Utils.Foldout(name, folded); + if (folded) { + ++EditorGUI.indentLevel; + func(); + --EditorGUI.indentLevel; + } + } + + void DrawMonitor() + { + Fold("Monitor", ref basicsFolded_, () => { + if (isAvailable) { + EditorGUILayout.HelpBox("Monitor information is available only in runtime.", MessageType.Info); + return; + } + var id = EditorGUILayout.Popup("Monitor", monitor.id, Manager.monitors.Select(x => x.name).ToArray()); + if (id != monitor.id) { texture.monitorId = id; } + EditorGUILayout.IntField("ID", monitor.id); + EditorGUILayout.Toggle("Is Primary", monitor.isPrimary); + EditorGUILayout.Vector2Field("Resolution", new Vector2(monitor.width, monitor.height)); + EditorGUILayout.Vector2Field("DPI", new Vector2(monitor.dpiX, monitor.dpiY)); + }); + } + + void DrawInvert() + { + Fold("Invert", ref invertFolded_, () => { + texture.invertX = EditorGUILayout.Toggle("Invert X", invertX_.boolValue); + texture.invertY = EditorGUILayout.Toggle("Invert Y", invertY_.boolValue); + }); + } + + void DrawClip() + { + Fold("Clip", ref clipFolded_, () => { + texture.useClip = EditorGUILayout.Toggle("Use Clip", useClip_.boolValue); + EditorGUILayout.PropertyField(clipPos_); + EditorGUILayout.PropertyField(clipScale_); + }); + } + + void DrawMaterial() + { + Fold("Material", ref matFolded_, () => { + if (!Application.isPlaying) { + EditorGUILayout.HelpBox("These parameters are applied to the shared material when not playing.", MessageType.Info); + } + texture.meshForwardDirection = (Texture.MeshForwardDirection)EditorGUILayout.EnumPopup("Mesh Forward Direction", texture.meshForwardDirection); + texture.bend = EditorGUILayout.Toggle("Use Bend", texture.bend); + texture.width = EditorGUILayout.FloatField("Bend Width", texture.width); + texture.radius = EditorGUILayout.Slider("Bend Radius", texture.radius, texture.worldWidth / (2 * Mathf.PI), 100f); + texture.thickness = EditorGUILayout.Slider("Thickness", texture.thickness, 0f, 30f); + texture.culling = (Texture.Culling)EditorGUILayout.EnumPopup("Culling", texture.culling); + }); + } +} + +} \ No newline at end of file diff --git a/Assets/uDesktopDuplication/Editor/TextureEditor.cs.meta b/Assets/uDesktopDuplication/Editor/TextureEditor.cs.meta new file mode 100644 index 0000000..27eb9ec --- /dev/null +++ b/Assets/uDesktopDuplication/Editor/TextureEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1202a4540abf0ad4781c025339772c4a +timeCreated: 1480758898 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/uDesktopDuplication/Editor/Utils.cs b/Assets/uDesktopDuplication/Editor/Utils.cs new file mode 100644 index 0000000..24646c0 --- /dev/null +++ b/Assets/uDesktopDuplication/Editor/Utils.cs @@ -0,0 +1,46 @@ +using UnityEngine; +using UnityEditor; + +namespace uDesktopDuplication +{ + +public static class Utils +{ + public static bool Foldout(string title, bool display) + { + var style = new GUIStyle("ShurikenModuleTitle"); + style.font = new GUIStyle(EditorStyles.label).font; + style.border = new RectOffset(15, 7, 4, 4); + style.fixedHeight = 22; + style.contentOffset = new Vector2(20f, -2f); + + var rect = GUILayoutUtility.GetRect(16f, 22f, style); + GUI.Box(rect, title, style); + + var e = Event.current; + + var toggleRect = new Rect(rect.x + 4f, rect.y + 2f, 13f, 13f); + if (e.type == EventType.Repaint) { + EditorStyles.foldout.Draw(toggleRect, false, false, display, false); + } + + if (e.type == EventType.MouseDown && rect.Contains(e.mousePosition)) { + display = !display; + e.Use(); + } + + return display; + } + + public static void ReadOnlyTextField(string label, string text) + { + EditorGUILayout.BeginHorizontal(); + { + EditorGUILayout.LabelField(label, GUILayout.Width(EditorGUIUtility.labelWidth - 4)); + EditorGUILayout.SelectableLabel(text, EditorStyles.textField, GUILayout.Height(EditorGUIUtility.singleLineHeight)); + } + EditorGUILayout.EndHorizontal(); + } +} + +} \ No newline at end of file diff --git a/Assets/uDesktopDuplication/Editor/Utils.cs.meta b/Assets/uDesktopDuplication/Editor/Utils.cs.meta new file mode 100644 index 0000000..445367e --- /dev/null +++ b/Assets/uDesktopDuplication/Editor/Utils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 278117152a6252546a219a17ef6f21f4 +timeCreated: 1480759393 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/uDesktopDuplication/Examples/Scenes/Primary Monitor.unity b/Assets/uDesktopDuplication/Examples/Scenes/Primary Monitor.unity index 3b7500dfd422ac9430915937ff20eb18bd91403f..8f8fbb8f7d682e411fe545767866c1c858aaea24 100644 GIT binary patch delta 181 zcmaEmzoS5!fx)1Jfx*Ipfq{V^$esYC8BFy|^o-JsHcGeZOIa{6FuY_2;s5_Za)I7+ z(m}KU+vHvPQgRd67#LOnxjA4AQ4$PQV!^)olYScuBiH1OCd!-Vn9N|D{J@w+kOu;j2u8MnR#WYMI{mOlNXpsph%P!r#k0k7Jwu~CMOuOfOKxQFU7&#_yG*R9>$7BZM1qN^t6y#B)(?S57DaeB*aYkx(cWaLJ_ zWTtvUAd3-*C4rd16U1g@SisECUU)MK@Ki~YLGmdxbNgBW;@|{hRnRO)S{Bec!tvAROg(` ag80oVm^n;0ueVTUoxH(;XY(c7b^HMNJuNo? delta 259 zcmbO*o3UXwqW}Yg?Mem)-v$N-27Vy>z(fH}QKPqsJ+V(e&0Dgm(P?>RxSb+UGHjz? zGE=<)ki`hZl0eMh31TxcEMR76uz-q7A&K7siaP-L96&4$66a6=s%BzX$iUFx0pzj( zu?(8H7gSspF3!jRGRFtV2b!bBAP1K~HAo&!+-q_avz-7#W?orpQAs32X>qD^PG-U8 T)yy2Go3~gfv2K23yN(|K|Gz5P diff --git a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs index a7d5958..4a87916 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs @@ -116,7 +116,7 @@ public class MultipleMonitorCreator : MonoBehaviour for (int i = 0; i < n; ++i) { // Create monitor obeject var go = Instantiate(monitorPrefab); - go.name = "Monitor " + i; + go.name = uDesktopDuplication.Manager.monitors[i].name; // Saved infomation if (savedInfoList.Count == i) { diff --git a/Assets/uDesktopDuplication/Materials/uDD_Screen_Standard.mat b/Assets/uDesktopDuplication/Materials/uDD_Screen_Standard.mat index 1a5df84a317fa320ac28831ecd59ccef8c148bf1..7db5f7277cea5b74d81d14b82f76cc01f1248a03 100644 GIT binary patch delta 181 zcmZ3W@kc|Nfq`QQ1A|Bn0|Ns;1A_pNVqh@UGto0jGukL!$iY~%xtC)zJEO*AM*#(H zg?Kmrpm4_^m-xudDFQ1P8Ko!l3W;;F0`Px# delta 109 zcmeyPu|Pwbfq`QQ1A~YH0|Ns;1A_pNVqh@UGto0lGu$X$$ib+vxtC)zJEQDmM*#(9 zpxovhffbB`Vn7xr5C>#dq~-+YB^FFJ70REyMd;4t1;QZ$Y(Sa#(6HdtWFP|wCToa< F005lK7c&3= diff --git a/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit.mat b/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit.mat index 71c7f59ddcca1df3dc41a320df300fb5c20c8519..9e9c82c54fac5953c71e2777eb8a4a76f1eb3b0a 100644 GIT binary patch delta 52 zcmdm>c|encfq`QQ1B1wcjT|i;j0ZONa_r`0l-cYlB+Mkh#=yW3AD)>~k^y8eG}up$ H5eWeRZT$@> delta 35 rcmX@0xj~bIfq`QQ1B1whjT|i;j2kxha_r`0l-}$qB+N89M|>ol#@5r+@;t zLcE)QP`G1|OMK+!9Dx;#ia_lQoIo6qS&^C(oR?St(hdZyKpgLsnwK(JRVbf_1H^O7 zFDg$gN|`)C=z#z`NFXRNC9|{`$ok+oxj;CCj|(Iil98F5otIi%Jb9n6m;f6{C_FQz PBm>A`Xt1ArMK}ZiBjzh7 delta 97 zcmZqCT%jS&z`(JDfk8xrfq{Xafk6OBF)*0wndlj&8E%v=|>ol$nOr+@-8 wP;PUHzzRl2vB|PR;*(v3GA8d4x-)r&aEJgKP%b_+EI2h8WC8=jWCM{90E{jaH~;_u diff --git a/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_Transparent.mat b/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_Transparent.mat index e65f5f4e45ff5cb7e7058c7d50c9511a6dc34406..c1bfbbffc4f9a9ec9dbcb85509fc580452c0cb90 100644 GIT binary patch delta 182 zcmZ3X(V{8Mz`(JDfkC8&fq{Xafk6OBF)*0wndlj%8Eup<|>ol#@5r+@;t zLcE)QP`G1|OMK+!9Dx;#ia_lQoIo6qS&^C(oR?St(hdZyKpgLsnwK(JRVbf_1H^O7 zFDg$gN|`)C=z#z`NFXRNC9|{`$ok+oxj;CCj|(Iil98F5otIi%Jb9n6m;f6{C_FQz PBm>A`Xt1ArMK}ZiBjzh7 delta 97 zcmZqCT%jS&z`(JDfk8xrfq{Xafk6OBF)*0wndlj&8E%v=|>ol$nOr+@-8 wP;PUHzzRl2vB|PR;*(v3GA8d4x-)r&aEJgKP%b_+EI2h8WC8=jWCM{90E{jaH~;_u diff --git a/Assets/uDesktopDuplication/Scripts/Texture.cs b/Assets/uDesktopDuplication/Scripts/Texture.cs index e1bf271..9ea9988 100644 --- a/Assets/uDesktopDuplication/Scripts/Texture.cs +++ b/Assets/uDesktopDuplication/Scripts/Texture.cs @@ -6,7 +6,7 @@ namespace uDesktopDuplication [AddComponentMenu("uDesktopDuplication/Texture")] public class Texture : MonoBehaviour { - private Monitor monitor_; + Monitor monitor_; public Monitor monitor { get { return monitor_; } @@ -14,33 +14,112 @@ public class Texture : MonoBehaviour { monitor_ = value; if (monitor_ != null) { - material = GetComponent().material; // clone material.mainTexture = monitor_.texture; - material.SetFloat("_Width", transform.localScale.x); + width = transform.localScale.x; + rotation = monitor.rotation; + invertX = invertX_; + invertY = invertY_; + useClip = useClip_; } } } - private int lastMonitorId_ = 0; + int lastMonitorId_ = 0; public int monitorId { get { return monitor.id; } set { monitor = Manager.GetMonitor(value); } } - [Header("Invert UVs")] - public bool invertX = false; - public bool invertY = false; + [SerializeField] bool invertX_ = false; + public bool invertX + { + get + { + return invertX_; + } + set + { + invertX_ = value; + if (invertX_) { + material.EnableKeyword("INVERT_X"); + } else { + material.DisableKeyword("INVERT_X"); + } + } + } - [Header("Clip")] - public bool useClip = false; + [SerializeField] bool invertY_ = false; + public bool invertY + { + get + { + return invertY_; + } + set + { + invertY_ = value; + if (invertY_) { + material.EnableKeyword("INVERT_Y"); + } else { + material.DisableKeyword("INVERT_Y"); + } + } + } + + public MonitorRotation rotation + { + get + { + return monitor.rotation; + } + set + { + switch (value) + { + case MonitorRotation.Identity: + material.DisableKeyword("ROTATE90"); + material.DisableKeyword("ROTATE180"); + material.DisableKeyword("ROTATE270"); + break; + case MonitorRotation.Rotate90: + material.EnableKeyword("ROTATE90"); + material.DisableKeyword("ROTATE180"); + material.DisableKeyword("ROTATE270"); + break; + case MonitorRotation.Rotate180: + material.DisableKeyword("ROTATE90"); + material.EnableKeyword("ROTATE180"); + material.DisableKeyword("ROTATE270"); + break; + case MonitorRotation.Rotate270: + material.DisableKeyword("ROTATE90"); + material.DisableKeyword("ROTATE180"); + material.EnableKeyword("ROTATE270"); + break; + default: + break; + } + } + } + + [SerializeField] bool useClip_ = false; public Vector2 clipPos = Vector2.zero; public Vector2 clipScale = new Vector2(0.2f, 0.2f); - - public enum MeshForwardDirection + public bool useClip { - Y = 0, - Z = 1, + get + { + return useClip_; + } + set + { + if (useClip_) { + material.EnableKeyword("USE_CLIP"); + } else { + material.DisableKeyword("USE_CLIP"); + } + } } public bool bend @@ -61,6 +140,11 @@ public class Texture : MonoBehaviour } } + public enum MeshForwardDirection + { + Y = 0, + Z = 1, + } public MeshForwardDirection meshForwardDirection { get @@ -84,6 +168,24 @@ public class Texture : MonoBehaviour } } + public enum Culling + { + Off = 0, + Front = 1, + Back = 2, + } + public Culling culling + { + get + { + return (Culling)material.GetInt("_Cull"); + } + set + { + material.SetInt("_Cull", (int)value); + } + } + public float radius { get { return material.GetFloat("_Radius"); } @@ -102,10 +204,39 @@ public class Texture : MonoBehaviour set { material.SetFloat("_Thickness", value); } } + Material material_; public Material material { - get; - private set; + get + { + if (Application.isPlaying) { + return material_ ?? (material_ = GetComponent().material); // clone + } else { + return GetComponent().sharedMaterial; + } + } + } + + Mesh mesh + { + get + { + return GetComponent().sharedMesh; + } + } + public float worldWidth + { + get + { + return transform.localScale.x * (mesh.bounds.extents.x * 2f); + } + } + public float worldHeight + { + get + { + return transform.localScale.y * (mesh.bounds.extents.y * 2f); + } } void OnEnable() @@ -124,7 +255,7 @@ public class Texture : MonoBehaviour void Update() { KeepMonitor(); - monitor.shouldBeUpdated = true; + RequireUpdate(); UpdateMaterial(); } @@ -137,6 +268,11 @@ public class Texture : MonoBehaviour } } + void RequireUpdate() + { + monitor.shouldBeUpdated = true; + } + void Reinitialize() { // Monitor instance is released here when initialized. @@ -145,76 +281,17 @@ public class Texture : MonoBehaviour void UpdateMaterial() { - Invert(); - Rotate(); - Clip(); - } - - void Invert() - { - if (invertX) { - material.EnableKeyword("INVERT_X"); - } else { - material.DisableKeyword("INVERT_X"); - } - - if (invertY) { - material.EnableKeyword("INVERT_Y"); - } else { - material.DisableKeyword("INVERT_Y"); - } - } - - void Rotate() - { - switch (monitor.rotation) - { - case MonitorRotation.Identity: - material.DisableKeyword("ROTATE90"); - material.DisableKeyword("ROTATE180"); - material.DisableKeyword("ROTATE270"); - break; - case MonitorRotation.Rotate90: - material.EnableKeyword("ROTATE90"); - material.DisableKeyword("ROTATE180"); - material.DisableKeyword("ROTATE270"); - break; - case MonitorRotation.Rotate180: - material.DisableKeyword("ROTATE90"); - material.EnableKeyword("ROTATE180"); - material.DisableKeyword("ROTATE270"); - break; - case MonitorRotation.Rotate270: - material.DisableKeyword("ROTATE90"); - material.DisableKeyword("ROTATE180"); - material.EnableKeyword("ROTATE270"); - break; - default: - break; - } - } - - void Clip() - { - if (useClip) { - material.EnableKeyword("USE_CLIP"); - material.SetVector("_ClipPositionScale", new Vector4(clipPos.x, clipPos.y, clipScale.x, clipScale.y)); - } else { - material.DisableKeyword("USE_CLIP"); - } + width = transform.localScale.x; + rotation = monitor.rotation; + material.SetVector("_ClipPositionScale", new Vector4(clipPos.x, clipPos.y, clipScale.x, clipScale.y)); } public Vector3 GetWorldPositionFromCoord(int u, int v) { - // Mesh & Scale information - var mesh = GetComponent().sharedMesh; - var width = transform.localScale.x * (mesh.bounds.extents.x * 2f); - var height = transform.localScale.y * (mesh.bounds.extents.y * 2f); - // Local position (scale included). var x = (float)(u - monitor.width / 2) / monitor.width; var y = -(float)(v - monitor.height / 2) / monitor.height; - var localPos = new Vector3(width * x, height * y, 0f); + var localPos = new Vector3(worldWidth * x, worldHeight * y, 0f); // Bending if (bend) { diff --git a/Assets/uDesktopDuplication/Shaders/uDD_Standard.shader b/Assets/uDesktopDuplication/Shaders/uDD_Standard.shader index fd62273..5c9699a 100644 --- a/Assets/uDesktopDuplication/Shaders/uDD_Standard.shader +++ b/Assets/uDesktopDuplication/Shaders/uDD_Standard.shader @@ -7,6 +7,11 @@ Properties _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0, 1)) = 0.5 _Metallic ("Metallic", Range(0, 1)) = 0.0 + [KeywordEnum(Y, Z)] _Forward("Mesh Forward Direction", Int) = 0 + [Toggle(BEND_ON)] _Bend("Use Bend", Int) = 0 + [PowerSlider(10.0)] _Radius("Bend Radius", Range(1, 100)) = 30 + [PowerSlider(10.0)] _Thickness("Thickness", Range(0.01, 10)) = 1 + _Width("Width", Range(0.0, 10.0)) = 1.0 [KeywordEnum(Off, Front, Back)] _Cull("Culling", Int) = 2 } @@ -19,18 +24,27 @@ SubShader CGPROGRAM #pragma target 3.0 - #pragma surface surf Standard fullforwardshadows + #pragma surface surf Standard fullforwardshadows vertex:vert #pragma multi_compile ___ INVERT_X #pragma multi_compile ___ INVERT_Y #pragma multi_compile ___ ROTATE90 ROTATE180 ROTATE270 - #pragma multi_compile ___ USE_BEND #pragma multi_compile ___ USE_CLIP + #pragma multi_compile ___ BEND_ON + #pragma multi_compile _FORWARD_Y _FORWARD_Z #define SURFACE_SHADER #include "./uDD_Common.cginc" half _Glossiness; half _Metallic; + half _Radius; + half _Width; + half _Thickness; + + void vert(inout appdata_full v) + { + uddBendVertex(v.vertex.xyz, _Radius, _Width, _Thickness); + } void surf(Input IN, inout SurfaceOutputStandard o) { diff --git a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_BlackMask.shader b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_BlackMask.shader index b04180d..fdeb14a 100644 --- a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_BlackMask.shader +++ b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_BlackMask.shader @@ -58,9 +58,9 @@ Pass #pragma multi_compile ___ INVERT_X #pragma multi_compile ___ INVERT_Y #pragma multi_compile ___ ROTATE90 ROTATE180 ROTATE270 - #pragma multi_compile ___ USE_BEND #pragma multi_compile ___ USE_CLIP - #pragma multi_compile _BEND_OFF _BEND_Y _BEND_Z + #pragma multi_compile ___ BEND_ON + #pragma multi_compile _FORWARD_Y _FORWARD_Z ENDCG } diff --git a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Transparent.shader b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Transparent.shader index 479a57e..c1e4132 100644 --- a/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Transparent.shader +++ b/Assets/uDesktopDuplication/Shaders/uDD_Unlit_Transparent.shader @@ -54,9 +54,9 @@ Pass #pragma multi_compile ___ INVERT_X #pragma multi_compile ___ INVERT_Y #pragma multi_compile ___ ROTATE90 ROTATE180 ROTATE270 - #pragma multi_compile ___ USE_BEND #pragma multi_compile ___ USE_CLIP - #pragma multi_compile _BEND_OFF _BEND_Y _BEND_Z + #pragma multi_compile ___ BEND_ON + #pragma multi_compile _FORWARD_Y _FORWARD_Z ENDCG }