45 lines
1023 B
GLSL
45 lines
1023 B
GLSL
#version 460
|
|
|
|
// OUT
|
|
// ---
|
|
|
|
in vec2 vUV;
|
|
out vec4 fragColor;
|
|
|
|
#include inc_map.glsl
|
|
|
|
uniform sampler2D iTex0;
|
|
uniform vec3 iGroup2_4[7];
|
|
|
|
void main() {
|
|
bool visible = iGroup2_4[0].x > 0;
|
|
bool invert = iGroup2_4[0].y > 0;
|
|
float rect = iGroup2_4[0].z;
|
|
|
|
vec2 uv2 = vUV;
|
|
|
|
if (visible) {
|
|
vec2 p1 = vec2(iGroup2_4[6].xy);
|
|
vec2 p2 = vec2(iGroup2_4[1].xy);
|
|
vec2 p3 = vec2(iGroup2_4[3].xy);
|
|
vec2 p4 = vec2(iGroup2_4[5].xy);
|
|
|
|
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, color + mask * vec4(1), rect * (step(uv2.x, 0.01) + step(uv2.y, 0.01) + step(1 - uv2.y, 0.01) + step(1 - uv2.x, 0.01)));
|
|
}
|
|
|
|
fragColor = color;
|
|
}
|