From 083ef01160e7b27bac1ad0faabd79cc9d9f51cef Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Wed, 31 Jul 2019 09:50:26 +0200 Subject: [PATCH] [unity] Sprite/Pixel Lit shader: Fixed errors in shader inspector GUI at certain configurations after change to ZWrite always on. See commit 4741279. --- .../Editor/Shaders/SpineSpriteShaderGUI.cs | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs index f0d034080..228e90162 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs @@ -479,7 +479,7 @@ public class SpineSpriteShaderGUI : ShaderGUI { break; default: { - bool zWrite = material.GetFloat("_ZWrite") > 0.0f; + bool zWrite = HasZWriteEnabled(material); SetRenderType(material, zWrite ? "TransparentCutout" : "Transparent", useCustomRenderType); } break; @@ -807,14 +807,15 @@ public class SpineSpriteShaderGUI : ShaderGUI { //Start with Culling disabled material.SetInt("_Cull", (int)eCulling.Off); //Start with Z writing disabled - material.SetInt("_ZWrite", 0); + if (material.HasProperty("_ZWrite")) + material.SetInt("_ZWrite", 0); } //Z write is on then static void SetRenderType (Material material, string renderType, bool useCustomRenderQueue) { //Want a check box to say if should use Sprite render queue (for custom writing depth and normals) - bool zWrite = material.GetFloat("_ZWrite") > 0.0f; + bool zWrite = HasZWriteEnabled(material); if (useCustomRenderQueue) { //If sprite has fixed normals then assign custom render type so we can write its correct normal with soft edges @@ -848,7 +849,7 @@ public class SpineSpriteShaderGUI : ShaderGUI { eBlendMode blendMode = GetMaterialBlendMode(material); SetBlendMode(material, blendMode); - bool zWrite = material.GetFloat("_ZWrite") > 0.0f; + bool zWrite = HasZWriteEnabled(material); bool clipAlpha = zWrite && blendMode != eBlendMode.Opaque && material.GetFloat("_Cutoff") > 0.0f; SetKeyword(material, "_ALPHA_CLIP", clipAlpha); @@ -965,7 +966,7 @@ public class SpineSpriteShaderGUI : ShaderGUI { { material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); - bool zWrite = material.GetFloat("_ZWrite") > 0.0f; + bool zWrite = HasZWriteEnabled(material); SetRenderType(material, zWrite ? "TransparentCutout" : "Transparent", useCustomRenderQueue); renderQueue = zWrite ? kAlphaTestQueue : kTransparentQueue; } @@ -974,7 +975,7 @@ public class SpineSpriteShaderGUI : ShaderGUI { { material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcColor); - bool zWrite = material.GetFloat("_ZWrite") > 0.0f; + bool zWrite = HasZWriteEnabled(material); SetRenderType(material, zWrite ? "TransparentCutout" : "Transparent", useCustomRenderQueue); renderQueue = zWrite ? kAlphaTestQueue : kTransparentQueue; } @@ -983,7 +984,7 @@ public class SpineSpriteShaderGUI : ShaderGUI { { material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.Zero); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.SrcColor); - bool zWrite = material.GetFloat("_ZWrite") > 0.0f; + bool zWrite = HasZWriteEnabled(material); SetRenderType(material, zWrite ? "TransparentCutout" : "Transparent", useCustomRenderQueue); renderQueue = zWrite ? kAlphaTestQueue : kTransparentQueue; } @@ -992,7 +993,7 @@ public class SpineSpriteShaderGUI : ShaderGUI { { material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.SrcColor); - bool zWrite = material.GetFloat("_ZWrite") > 0.0f; + bool zWrite = HasZWriteEnabled(material); SetRenderType(material, zWrite ? "TransparentCutout" : "Transparent", useCustomRenderQueue); renderQueue = zWrite ? kAlphaTestQueue : kTransparentQueue; } @@ -1001,7 +1002,7 @@ public class SpineSpriteShaderGUI : ShaderGUI { { material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); - bool zWrite = material.GetFloat("_ZWrite") > 0.0f; + bool zWrite = HasZWriteEnabled(material); SetRenderType(material, zWrite ? "TransparentCutout" : "Transparent", useCustomRenderQueue); renderQueue = zWrite ? kAlphaTestQueue : kTransparentQueue; } @@ -1040,5 +1041,11 @@ public class SpineSpriteShaderGUI : ShaderGUI { return material.IsKeywordEnabled("_FIXED_NORMALS_VIEWSPACE_BACKFACE") || material.IsKeywordEnabled("_FIXED_NORMALS_MODELSPACE_BACKFACE"); } + static bool HasZWriteEnabled (Material material) { + if (material.HasProperty("_ZWrite")) { + return material.GetFloat("_ZWrite") > 0.0f; + } + else return true; // Pixel Lit shader always has _ZWrite enabled. + } #endregion }