shader_type canvas_item; bool checkLB(float len, sampler2D tex, vec2 uv) { int c = 0; int c2 = 0; if (texture(tex, uv + vec2(-len, 0.0)).a > 0.0) { c++; c2 += 1; } else if (texture(tex, uv + vec2(-len * 2.0, 0.0)).a > 0.0) { c++; c2 += 2; } if (c > 0) { if (texture(tex, uv + vec2(0.0, -len)).a > 0.0) { c++; c2 += 1; } else if (texture(tex, uv + vec2(0.0, -len * 2.0)).a > 0.0) { c++; c2 += 2; } } return c >= 2 && c2 <= 3; } bool checkLT(float len, sampler2D tex, vec2 uv) { int c = 0; int c2 = 0; if (texture(tex, uv + vec2(-len, 0.0)).a > 0.0) { c++; c2 += 1; } else if (texture(tex, uv + vec2(-len * 2.0, 0.0)).a > 0.0) { c++; c2 += 2; } if (c > 0) { if (texture(tex, uv + vec2(0.0, len)).a > 0.0) { c++; c2 += 1; } else if (texture(tex, uv + vec2(0.0, len * 2.0)).a > 0.0) { c++; c2 += 2; } } return c >= 2 && c2 <= 3; } bool checkRB(float len, sampler2D tex, vec2 uv) { int c = 0; int c2 = 0; if (texture(tex, uv + vec2(len, 0.0)).a > 0.0) { c++; c2 += 1; } else if (texture(tex, uv + vec2(len * 2.0, 0.0)).a > 0.0) { c++; c2 += 2; } if (c > 0) { if (texture(tex, uv + vec2(0.0, -len)).a > 0.0) { c++; c2 += 1; } else if (texture(tex, uv + vec2(0.0, -len * 2.0)).a > 0.0) { c++; c2 += 2; } } return c >= 2 && c2 <= 3; } bool checkRT(float len, sampler2D tex, vec2 uv) { int c = 0; int c2 = 0; if (texture(tex, uv + vec2(len, 0.0)).a > 0.0) { c++; c2 += 1; } else if (texture(tex, uv + vec2(len * 2.0, 0.0)).a > 0.0) { c++; c2 += 2; } if (c > 0) { if (texture(tex, uv + vec2(0.0, len)).a > 0.0) { c++; c2 += 1; } else if (texture(tex, uv + vec2(0.0, len * 2.0)).a > 0.0) { c++; c2 += 2; } } return c >= 2 && c2 <= 3; } void vertex() { VERTEX = VERTEX * vec2(4.0); } void fragment() { if (COLOR.a <= 0.0) { int c = 0; vec4 cf = vec4(0.0, 0.0, 0.0, 0.0); vec4 cL = texture(TEXTURE, UV + vec2(-TEXTURE_PIXEL_SIZE.x, 0.0)); vec4 cr = texture(TEXTURE, UV + vec2(TEXTURE_PIXEL_SIZE.x, 0.0)); vec4 ct = texture(TEXTURE, UV + vec2(0.0, TEXTURE_PIXEL_SIZE.y)); vec4 cb = texture(TEXTURE, UV + vec2(0.0, -TEXTURE_PIXEL_SIZE.y)); if (cL.a > 0.0) { c++; cf += cL; } if (cr.a > 0.0) { c++; cf += cr; } if (ct.a > 0.0) { c++; cf += ct; } if (cb.a > 0.0) { c++; cf += cb; } if (c >= 2) { if (cb.a > 0.0 && cL.a > 0.0) { if (checkLB(TEXTURE_PIXEL_SIZE.y / 4.0, TEXTURE, UV)) { cf /= float(c); COLOR = cf; } } if (ct.a > 0.0 && cL.a > 0.0) { if (checkLT(TEXTURE_PIXEL_SIZE.y / 4.0, TEXTURE, UV)) { cf /= float(c); COLOR = cf; } } if (cb.a > 0.0 && cr.a > 0.0) { if (checkRB(TEXTURE_PIXEL_SIZE.y / 4.0, TEXTURE, UV)) { cf /= float(c); COLOR = cf; } } if (ct.a > 0.0 && cr.a > 0.0) { if (checkRT(TEXTURE_PIXEL_SIZE.y / 4.0, TEXTURE, UV)) { cf /= float(c); COLOR = cf; } } } } else { int c = 0; float tempV = TEXTURE_PIXEL_SIZE.x / 4.0; vec4 cf = vec4(0.0, 0.0, 0.0, 0.0); vec4 clt = texture(TEXTURE, UV + vec2(-tempV, tempV)); vec4 crt = texture(TEXTURE, UV + vec2(tempV, tempV)); vec4 clb = texture(TEXTURE, UV + vec2(-tempV, -tempV)); vec4 crb = texture(TEXTURE, UV + vec2(tempV, -tempV)); if (clt.a > 0.0) { c++; cf += clt; } if (crt.a > 0.0) { c++; cf += crt; } if (clb.a > 0.0) { c++; cf += clb; } if (crb.a > 0.0) { c++; cf += crb; } if (c > 0 && c < 2) { COLOR = vec4(0.0, 0.0, 0.0, 0.0); } else { COLOR = cf / float(c); } } }