#version 460 // OUT // --- in vec2 vUV; out vec4 fragColor; #include inc_map.glsl uniform sampler2D iTex0; uniform int iAutoRand; uniform vec3 iGroup2_4[7]; void main() { bool visible = iAutoRand < 1 && iGroup2_4[0].x > 0; bool invert = iAutoRand < 1 && iGroup2_4[0].y > 0; bool rect = iAutoRand < 1 && iGroup2_4[0].z > 0; vec2 uv2 = vUV; if (visible) { vec2 p1 = iAutoRand < 1 ? vec2(iGroup2_4[6].xy) : vec2(0); vec2 p2 = iAutoRand < 1 ? vec2(iGroup2_4[1].xy) : vec2(0); vec2 p3 = iAutoRand < 1 ? vec2(iGroup2_4[3].xy) : vec2(0); vec2 p4 = iAutoRand < 1 ? vec2(iGroup2_4[5].xy) : vec2(0); p2.x = 1 - p2.x; p3.y = 1 - p3.y; p4.x = 1 - p4.x; p4.y = 1 - p4.y; uv2 = project_4p(vUV, p1, p2, p3, p4); } vec4 color = texture(iTex0, invert ? vUV : uv2); if (visible) { float mask = step(0, uv2.x) * step(-1, -uv2.x) * step(0, uv2.y) * step(-1, -uv2.y); color *= mix(mask, 1 - mask, invert ? 1 : 0); color = mix(color, mix(color, color + mask * vec4(1), step(uv2.x, 0.01) + step(uv2.y, 0.01) + step(1 - uv2.y, 0.01) + step(1 - uv2.x, 0.01)), rect ? 1 : 0); } fragColor = color; }