115 lines
3.1 KiB
GLSL
115 lines
3.1 KiB
GLSL
#version 460
|
|
|
|
// OUT
|
|
// ---
|
|
|
|
in vec2 vUV;
|
|
out vec4 fragColor;
|
|
|
|
#include inc_map.glsl
|
|
|
|
uniform sampler2D iTex0;
|
|
uniform vec3 iGroup2_4[7];
|
|
uniform vec3 iGroup2_5[7];
|
|
uniform vec3 iGroup2_6[7];
|
|
uniform vec3 iGroup2_7[7];
|
|
|
|
void main() {
|
|
bool visible = (iGroup2_4[4].x + iGroup2_5[4].x + iGroup2_6[4].x + iGroup2_7[4].x) > 0;
|
|
bool invert = (iGroup2_4[4].y + iGroup2_5[4].y + iGroup2_6[4].y + iGroup2_7[4].y) > 0;
|
|
float rect = clamp(iGroup2_4[4].z + iGroup2_5[4].z + iGroup2_6[4].z + iGroup2_7[4].z, 0, 1);
|
|
bool modified = false;
|
|
|
|
vec2 uv = mix(vec2(0), vUV, base_mask(vUV));
|
|
|
|
if (iGroup2_4[4].x > 0) {
|
|
vec2 p11 = vec2(iGroup2_4[6].xy);
|
|
vec2 p12 = vec2(iGroup2_4[1].xy);
|
|
vec2 p13 = vec2(iGroup2_4[3].xy);
|
|
vec2 p14 = vec2(iGroup2_4[5].xy);
|
|
|
|
p12.x = 1 - p12.x;
|
|
p13.y = 1 - p13.y;
|
|
p14.x = 1 - p14.x;
|
|
p14.y = 1 - p14.y;
|
|
|
|
vec2 uv1 = project_4p(vUV, p11, p12, p13, p14);
|
|
uv1 = mix(vec2(0), uv1, base_mask(uv1));
|
|
uv = uv1;
|
|
modified = true;
|
|
}
|
|
|
|
if (iGroup2_5[4].x > 0) {
|
|
vec2 p21 = vec2(iGroup2_5[6].xy);
|
|
vec2 p22 = vec2(iGroup2_5[1].xy);
|
|
vec2 p23 = vec2(iGroup2_5[3].xy);
|
|
vec2 p24 = vec2(iGroup2_5[5].xy);
|
|
|
|
p22.x = 1 - p22.x;
|
|
p23.y = 1 - p23.y;
|
|
p24.x = 1 - p24.x;
|
|
p24.y = 1 - p24.y;
|
|
|
|
vec2 uv2 = project_4p(vUV, p21, p22, p23, p24);
|
|
uv2 = mix(vec2(0), uv2, base_mask(uv2));
|
|
if (modified) {
|
|
uv = mix(uv, uv2, step(0.0001, length(uv2)));
|
|
} else {
|
|
uv = uv2;
|
|
}
|
|
modified = true;
|
|
}
|
|
|
|
if (iGroup2_6[4].x > 0) {
|
|
vec2 p31 = vec2(iGroup2_6[6].xy);
|
|
vec2 p32 = vec2(iGroup2_6[1].xy);
|
|
vec2 p33 = vec2(iGroup2_6[3].xy);
|
|
vec2 p34 = vec2(iGroup2_6[5].xy);
|
|
|
|
p32.x = 1 - p32.x;
|
|
p33.y = 1 - p33.y;
|
|
p34.x = 1 - p34.x;
|
|
p34.y = 1 - p34.y;
|
|
|
|
vec2 uv3 = project_4p(vUV, p31, p32, p33, p34);
|
|
uv3 = mix(vec2(0), uv3, base_mask(uv3));
|
|
if (modified) {
|
|
uv = mix(uv, uv3, step(0.0001, length(uv3)));
|
|
} else {
|
|
uv = uv3;
|
|
}
|
|
modified = true;
|
|
}
|
|
|
|
if (iGroup2_7[4].x > 0) {
|
|
vec2 p41 = vec2(iGroup2_7[6].xy);
|
|
vec2 p42 = vec2(iGroup2_7[1].xy);
|
|
vec2 p43 = vec2(iGroup2_7[3].xy);
|
|
vec2 p44 = vec2(iGroup2_7[5].xy);
|
|
|
|
p42.x = 1 - p42.x;
|
|
p43.y = 1 - p43.y;
|
|
p44.x = 1 - p44.x;
|
|
p44.y = 1 - p44.y;
|
|
|
|
vec2 uv4 = project_4p(vUV, p41, p42, p43, p44);
|
|
uv4 = mix(vec2(0), uv4, base_mask(uv4));
|
|
if (modified) {
|
|
uv = mix(uv, uv4, step(0.0001, length(uv4)));
|
|
} else {
|
|
uv = uv4;
|
|
}
|
|
modified = true;
|
|
}
|
|
|
|
vec4 color = texture(iTex0, invert ? vUV : uv);
|
|
|
|
if (visible) {
|
|
float mask = step(0.0001, length(uv));
|
|
color *= mix(mask, 1 - mask, invert ? 1 : 0);
|
|
color = mix(color, color + mask * vec4(1), rect * (step(uv.x, 0.01) + step(uv.y, 0.01) + step(1 - uv.y, 0.01) + step(1 - uv.x, 0.01)));
|
|
}
|
|
|
|
fragColor = color;
|
|
}
|