Răsfoiți Sursa

fixed mask shader

dmuratshin 8 ani în urmă
părinte
comite
f5f3e32b31
1 a modificat fișierele cu 19 adăugiri și 3 ștergeri
  1. 19 3
      oxygine/system_data/original/system/shader.glsl

+ 19 - 3
oxygine/system_data/original/system/shader.glsl

@@ -84,6 +84,18 @@ lowp vec4 get_base_sdf()
     return res;
 }
 
+lowp vec2 my_step(lowp vec2 a, lowp vec2 b)
+{
+#ifdef ANDROID
+	lowp vec2 r;
+	r.x = a.x < b.x  ? 1.0 : 0.0;
+	r.y = a.y < b.y  ? 1.0 : 0.0;
+	return r;
+#else
+	return step(a, b);
+#endif
+}
+
 lowp vec4 get_color()
 {
 
@@ -100,8 +112,8 @@ lowp vec4 get_color()
 
 
 #ifdef MASK
-	mediump vec2 uv2 = clamp(result_uv2, clip_mask.xy, clip_mask.zw);
-	lowp vec4 mask = texture2D(mask_texture, uv2);
+	//mediump vec2 uv2 = clamp(result_uv2, clip_mask.xy, clip_mask.zw);
+	lowp vec4 mask = texture2D(mask_texture, result_uv2);
 
 #ifdef MASK_R_CHANNEL
 	lowp float mask_alpha = mask.r + 0.001;	
@@ -109,7 +121,11 @@ lowp vec4 get_color()
 	lowp float mask_alpha = mask.a + 0.001;
 #endif
 
-	base = base * mask_alpha;
+	lowp vec2 sc1 = my_step(clip_mask.xy, result_uv2.xy);
+	lowp vec2 sc2 = my_step(result_uv2.xy, clip_mask.zw);
+	lowp float m = mask_alpha * sc1.x * sc1.y * sc2.x * sc2.y;
+
+	base = base * m;
 #endif
 
 #ifdef DONT_MULT_BY_RESULT_COLOR