فهرست منبع

[unity] Sprite/Pixel Lit shader: Fixed errors in shader inspector GUI at certain configurations after change to ZWrite always on. See commit 4741279.

Harald Csaszar 6 سال پیش
والد
کامیت
083ef01160
1فایلهای تغییر یافته به همراه16 افزوده شده و 9 حذف شده
  1. 16 9
      spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs

+ 16 - 9
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
 }