Fix opacity handling for blend filters in orx-fx
This commit is contained in:
@@ -8,22 +8,7 @@ out vec4 o_color;
|
||||
void main() {
|
||||
vec4 a = texture(tex0, v_texCoord0);
|
||||
vec4 b = texture(tex1, v_texCoord0);
|
||||
|
||||
vec3 na = a.a == 0.0 ? a.rgb: a.rgb / a.a;
|
||||
vec3 nb = b.a == 0.0 ? b.rgb: b.rgb / b.a;
|
||||
|
||||
float minAlpha = min(a.a, b.a);
|
||||
float maxAlpha = max(a.a, b.a);
|
||||
|
||||
vec3 ka = mix(vec3(0.0), na.rgb, a.a);
|
||||
vec3 kb = mix(vec3(0.0), nb.rgb, b.a);
|
||||
|
||||
vec4 m = vec4(ka+kb, 1.0) * maxAlpha;
|
||||
|
||||
vec4 l = a;
|
||||
l = l * (1.0 - b.a) + b;
|
||||
l = l * (1.0 - m.a) + m;
|
||||
o_color = l;
|
||||
o_color.a = maxAlpha;
|
||||
|
||||
vec3 na = a.a > 0 ? a.rgb/a.a : vec3(0.0);
|
||||
vec3 addColor = b.rgb; //mix(vec3(0.0), nb, b.a);
|
||||
o_color = vec4((na + addColor), 1) * a.a;
|
||||
}
|
||||
@@ -8,32 +8,19 @@ float blendColorBurn(float base, float blend) {
|
||||
return (blend==0.0) ? blend : max((1.0 - ((1.0 - base) / blend)), 0.0);
|
||||
}
|
||||
|
||||
|
||||
out vec4 o_color;
|
||||
void main() {
|
||||
vec4 a = texture(tex0, v_texCoord0);
|
||||
vec4 b = texture(tex1, v_texCoord0);
|
||||
|
||||
vec3 na = a.a == 0.0 ? vec3(0.0): a.rgb / a.a;
|
||||
vec3 nb = b.a == 0.0 ? b.rgb: b.rgb / b.a;
|
||||
vec3 nb = b.a == 0.0 ? vec3(0.0): b.rgb / b.a;
|
||||
|
||||
float minAlpha = min(a.a, b.a);
|
||||
float maxAlpha = max(a.a, b.a);
|
||||
vec3 m = vec3(
|
||||
blendColorBurn(na.r, nb.r),
|
||||
blendColorBurn(na.g, nb.g),
|
||||
blendColorBurn(na.b, nb.b)
|
||||
);
|
||||
|
||||
vec3 ka = mix(vec3(0.0), na.rgb, a.a);
|
||||
vec3 kb = mix(vec3(1.0), nb.rgb, b.a);
|
||||
|
||||
vec4 m = vec4(
|
||||
blendColorBurn(ka.r, kb.r),
|
||||
blendColorBurn(ka.g, kb.g),
|
||||
blendColorBurn(ka.b, kb.b),
|
||||
|
||||
1.0
|
||||
) * maxAlpha;
|
||||
|
||||
vec4 l = a;
|
||||
l = l * (1.0 - b.a) + b;
|
||||
l = l * (1.0 - m.a) + m;
|
||||
o_color = l;
|
||||
o_color.a = maxAlpha;
|
||||
o_color = vec4(na * (1.0 - b.a) + b.a * m, 1.0) * a.a;
|
||||
}
|
||||
@@ -16,22 +16,11 @@ void main() {
|
||||
vec3 na = a.a == 0.0 ? vec3(0.0): a.rgb / a.a;
|
||||
vec3 nb = b.a == 0.0 ? vec3(0.0): b.rgb / b.a;
|
||||
|
||||
float minAlpha = min(a.a, b.a);
|
||||
float maxAlpha = max(a.a, b.a);
|
||||
vec3 m = vec3(
|
||||
dodge(na.r, nb.r),
|
||||
dodge(na.g, nb.g),
|
||||
dodge(na.b, nb.b)
|
||||
);
|
||||
|
||||
vec3 ka = mix(vec3(0.0), na.rgb, a.a);
|
||||
vec3 kb = mix(vec3(0.0), nb.rgb, b.a);
|
||||
|
||||
vec4 m = vec4(
|
||||
dodge(ka.r, kb.r),
|
||||
dodge(ka.g, kb.g),
|
||||
dodge(ka.b, kb.b),
|
||||
1.0
|
||||
) * maxAlpha;
|
||||
|
||||
vec4 l = a;
|
||||
l = l * (1.0 - b.a) + b;
|
||||
l = l * (1.0 - m.a) + m;
|
||||
o_color = l;
|
||||
o_color.a = maxAlpha;
|
||||
o_color = vec4(na * (1.0 - b.a) + b.a * m, 1.0) * a.a;
|
||||
}
|
||||
@@ -12,23 +12,10 @@ void main() {
|
||||
vec3 na = a.a == 0.0 ? vec3(0.0): a.rgb / a.a;
|
||||
vec3 nb = b.a == 0.0 ? vec3(0.0): b.rgb / b.a;
|
||||
|
||||
float minAlpha = min(a.a, b.a);
|
||||
float maxAlpha = max(a.a, b.a);
|
||||
vec3 m = vec3(
|
||||
nb.r <= na.r? nb.r : na.r,
|
||||
nb.g <= na.g? nb.g : na.g,
|
||||
nb.b <= na.b? nb.b : na.b);
|
||||
|
||||
vec3 ka = mix(vec3(0.0), na.rgb, a.a);
|
||||
vec3 kb = mix(na.rgb, nb.rgb, b.a);
|
||||
|
||||
|
||||
vec4 m = vec4(
|
||||
kb.r <= ka.r? kb.r : ka.r,
|
||||
kb.g <= ka.g? kb.g : ka.g,
|
||||
kb.b <= ka.b? kb.b : ka.b,
|
||||
1.0
|
||||
) * maxAlpha;
|
||||
|
||||
vec4 l = a;
|
||||
l = l * (1.0 - b.a) + b;
|
||||
l = l * (1.0 - m.a) + m;
|
||||
o_color = l;
|
||||
o_color.a = maxAlpha;
|
||||
o_color = vec4(na * (1.0 - b.a) + b.a * m, 1.0) * a.a;
|
||||
}
|
||||
@@ -10,6 +10,6 @@ void main() {
|
||||
vec4 a = texture(tex0, v_texCoord0);
|
||||
vec4 b = texture(tex1, v_texCoord0);
|
||||
|
||||
o_color.rgb = a.rgb;
|
||||
o_color.a = b.a;
|
||||
vec3 na = a.a == 0.0 ? vec3(0.0): a.rgb / a.a;
|
||||
o_color = vec4(na, 1.0) * b.a * a.a;
|
||||
}
|
||||
@@ -9,6 +9,6 @@ void main() {
|
||||
vec4 a = texture(tex0, v_texCoord0);
|
||||
vec4 b = texture(tex1, v_texCoord0);
|
||||
|
||||
o_color.rgb = a.rgb;
|
||||
o_color.a = max(a.a - b.a, 0.0);
|
||||
vec3 na = a.a == 0.0 ? vec3(0.0): a.rgb / a.a;
|
||||
o_color = vec4(na, 1.0) * max(a.a - b.a, 0.0);
|
||||
}
|
||||
@@ -12,22 +12,11 @@ void main() {
|
||||
vec3 na = a.a == 0.0 ? vec3(0.0): a.rgb / a.a;
|
||||
vec3 nb = b.a == 0.0 ? vec3(0.0): b.rgb / b.a;
|
||||
|
||||
float minAlpha = min(a.a, b.a);
|
||||
float maxAlpha = max(a.a, b.a);
|
||||
vec3 m = vec3(
|
||||
nb.r <= 0.5? 2*na.r * nb.r : 1.0 - 2.0*(1.0 - na.r)*(1.0 - nb.r),
|
||||
nb.g <= 0.5? 2*na.g * nb.g : 1.0 - 2.0*(1.0 - na.g)*(1.0 - nb.g),
|
||||
nb.b <= 0.5? 2*na.b * nb.b : 1.0 - 2.0*(1.0 - na.b)*(1.0 - nb.b)
|
||||
);
|
||||
o_color = vec4(na * (1.0 - b.a) + b.a * m, 1.0) * a.a;
|
||||
|
||||
vec3 ka = mix(vec3(0.0), na.rgb, a.a);
|
||||
vec3 kb = mix(vec3(0.5), nb.rgb, b.a);
|
||||
|
||||
vec4 m = vec4(
|
||||
kb.r <= 0.5? 2*ka.r * kb.r : 1.0 - 2.0*(1.0 - ka.r)*(1.0 - kb.r),
|
||||
kb.g <= 0.5? 2*ka.g * kb.g : 1.0 - 2.0*(1.0 - ka.g)*(1.0 - kb.g),
|
||||
kb.b <= 0.5? 2*ka.b * kb.b : 1.0 - 2.0*(1.0 - ka.b)*(1.0 - kb.b),
|
||||
1.0
|
||||
) * maxAlpha;
|
||||
|
||||
vec4 l = a;
|
||||
l = l * (1.0 - b.a) + b;
|
||||
l = l * (1.0 - m.a) + m;
|
||||
o_color = l;
|
||||
o_color.a = maxAlpha;
|
||||
}
|
||||
@@ -12,23 +12,10 @@ void main() {
|
||||
vec3 na = a.a == 0.0 ? vec3(0.0): a.rgb / a.a;
|
||||
vec3 nb = b.a == 0.0 ? vec3(0.0): b.rgb / b.a;
|
||||
|
||||
float minAlpha = min(a.a, b.a);
|
||||
float maxAlpha = max(a.a, b.a);
|
||||
vec3 m = vec3(
|
||||
nb.r >= na.r? nb.r : na.r,
|
||||
nb.g >= na.g? nb.g : na.g,
|
||||
nb.b >= na.b? nb.b : na.b);
|
||||
|
||||
vec3 ka = mix(vec3(0.0), na.rgb, a.a);
|
||||
vec3 kb = mix(na.rgb, nb.rgb, b.a);
|
||||
|
||||
vec4 m = vec4(
|
||||
kb.r >= ka.r? kb.r : ka.r,
|
||||
kb.g >= ka.g? kb.g : ka.g,
|
||||
kb.b >= ka.b? kb.b : ka.b,
|
||||
1.0
|
||||
) * maxAlpha;
|
||||
|
||||
|
||||
vec4 l = a;
|
||||
l = l * (1.0 - b.a) + b;
|
||||
l = l * (1.0 - m.a) + m;
|
||||
o_color = l;
|
||||
o_color.a = maxAlpha;
|
||||
o_color = vec4(na * (1.0 - b.a) + b.a * m, 1.0) * a.a;
|
||||
}
|
||||
@@ -8,23 +8,8 @@ out vec4 o_color;
|
||||
void main() {
|
||||
vec4 a = texture(tex0, v_texCoord0);
|
||||
vec4 b = texture(tex1, v_texCoord0);
|
||||
|
||||
vec3 na = a.a == 0.0 ? a.rgb: a.rgb / a.a;
|
||||
vec3 nb = b.a == 0.0 ? b.rgb: b.rgb / b.a;
|
||||
|
||||
float minAlpha = min(a.a, b.a);
|
||||
float maxAlpha = max(a.a, b.a);
|
||||
|
||||
vec3 ka = mix(vec3(1.0), na.rgb, a.a);
|
||||
vec3 kb = mix(vec3(1.0), nb.rgb, b.a);
|
||||
|
||||
vec4 m = vec4(ka*kb, 1.0) * maxAlpha;
|
||||
|
||||
vec4 l = a;
|
||||
l = l * (1.0 - b.a) + b;
|
||||
l = l * (1.0 - m.a) + m;
|
||||
|
||||
o_color = l;
|
||||
o_color.a = maxAlpha;
|
||||
vec3 nb = b.a > 0 ? b.rgb/b.a : vec3(0.0);
|
||||
vec3 mulColor = mix(vec3(1.0), nb, b.a);
|
||||
o_color = vec4(a.rgb * mulColor, a.a);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,5 +11,5 @@ void main() {
|
||||
float alpha = min(1,max(0, b.a));
|
||||
|
||||
o_color = a * (1.0-alpha) + b;
|
||||
o_color.a = 1.0;
|
||||
o_color.a = clamp(o_color.a, 0.0, 1.0);
|
||||
}
|
||||
@@ -6,18 +6,29 @@ uniform sampler2D tex0;
|
||||
uniform sampler2D tex1;
|
||||
|
||||
out vec4 o_color;
|
||||
|
||||
vec3 demul(vec4 c) {
|
||||
if (c.a == 0) {
|
||||
return vec3(0.0);
|
||||
} else {
|
||||
return c.rgb / c.a;
|
||||
}
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec4 a = texture(tex0, v_texCoord0);
|
||||
vec4 b = texture(tex1, v_texCoord0);
|
||||
|
||||
vec3 na = demul(a);
|
||||
vec3 nb = demul(b);
|
||||
|
||||
vec4 c = vec4(
|
||||
a.r <= 0.5? 2.0*a.r * b.r : 1.0 - 2.0*(1.0-a.r)*(1.0-b.r),
|
||||
a.g <= 0.5? 2.0*a.g * b.g : 1.0 - 2.0*(1.0-a.g)*(1.0-b.g),
|
||||
a.b <= 0.5? 2.0*a.b * b.b : 1.0 - 2.0*(1.0-a.b)*(1.0-b.b),
|
||||
na.r <= 0.5? 2.0 * na.r * nb.r : (1.0 - 2.0 * (1.0 - na.r) * (1.0 - nb.r)),
|
||||
na.g <= 0.5? 2.0 * na.g * nb.g : (1.0 - 2.0 * (1.0 - na.g) * (1.0 - nb.g)),
|
||||
na.b <= 0.5? 2.0 * na.b * nb.b : (1.0 - 2.0 * (1.0 - na.b) * (1.0 - nb.b)),
|
||||
1.0
|
||||
);
|
||||
|
||||
vec4 d = a * (1.0 - b.a) + c * b.a;
|
||||
o_color = max(vec4(0), min(vec4(1), d));
|
||||
o_color.a = 1.0;
|
||||
vec3 fc = na * (1.0 - b.a) + c.rgb * b.a;
|
||||
o_color = vec4(fc, 1.0) * a.a;
|
||||
}
|
||||
@@ -12,22 +12,10 @@ void main() {
|
||||
vec3 na = a.a == 0.0 ? vec3(0.0): a.rgb / a.a;
|
||||
vec3 nb = b.a == 0.0 ? vec3(0.0): b.rgb / b.a;
|
||||
|
||||
float minAlpha = min(a.a, b.a);
|
||||
float maxAlpha = max(a.a, b.a);
|
||||
vec3 m = vec3(
|
||||
1.0-((1.0-na.r)*(1.0-nb.r)),
|
||||
1.0-((1.0-na.g)*(1.0-nb.g)),
|
||||
1.0-((1.0-na.b)*(1.0-nb.b)));
|
||||
|
||||
vec3 ka = mix(vec3(0.0), na.rgb, a.a);
|
||||
vec3 kb = mix(na.rgb, nb.rgb, b.a);
|
||||
|
||||
vec4 m = vec4(
|
||||
1.0-((1.0-ka.r)*(1.0-kb.r)),
|
||||
1.0-((1.0-ka.g)*(1.0-kb.g)),
|
||||
1.0-((1.0-ka.b)*(1.0-kb.b)),
|
||||
1.0
|
||||
) * maxAlpha;
|
||||
|
||||
vec4 l = a;
|
||||
l = l * (1.0 - b.a) + b;
|
||||
l = l * (1.0 - m.a) + m;
|
||||
o_color = l;
|
||||
o_color.a = maxAlpha;
|
||||
o_color = vec4(na * (1.0 - b.a) + b.a * m, 1.0) * a.a;
|
||||
}
|
||||
@@ -9,6 +9,6 @@ void main() {
|
||||
vec4 a = texture(tex0, v_texCoord0);
|
||||
vec4 b = texture(tex1, v_texCoord0);
|
||||
|
||||
o_color.rgb = b.rgb;
|
||||
o_color.a = a.a;
|
||||
vec3 nb = b.a == 0.0 ? vec3(0.0): b.rgb / b.a;
|
||||
o_color = vec4(nb, 1.0) * a.a * b.a;
|
||||
}
|
||||
@@ -9,6 +9,6 @@ void main() {
|
||||
vec4 a = texture(tex0, v_texCoord0);
|
||||
vec4 b = texture(tex1, v_texCoord0);
|
||||
|
||||
o_color.rgb = b.rgb;
|
||||
o_color.a = max(b.a - a.a, 0.0);
|
||||
vec3 nb = b.a == 0.0 ? vec3(0.0): b.rgb / b.a;
|
||||
o_color = vec4(nb, 1.0) * max(b.a - a.a, 0.0);
|
||||
}
|
||||
@@ -8,22 +8,7 @@ out vec4 o_color;
|
||||
void main() {
|
||||
vec4 a = texture(tex0, v_texCoord0);
|
||||
vec4 b = texture(tex1, v_texCoord0);
|
||||
|
||||
vec3 na = a.a == 0.0 ? a.rgb: a.rgb / a.a;
|
||||
vec3 nb = b.a == 0.0 ? b.rgb: b.rgb / b.a;
|
||||
|
||||
float minAlpha = min(a.a, b.a);
|
||||
float maxAlpha = max(a.a, b.a);
|
||||
|
||||
vec3 ka = mix(vec3(0.0), na.rgb, a.a);
|
||||
vec3 kb = mix(vec3(0.0), nb.rgb, b.a);
|
||||
|
||||
vec4 m = vec4(na-kb, 1.0) * maxAlpha;
|
||||
|
||||
vec4 l = a;
|
||||
l = l * (1.0 - b.a) + b;
|
||||
l = l * (1.0 - m.a) + m;
|
||||
o_color = l;
|
||||
o_color.a = maxAlpha;
|
||||
|
||||
vec3 na = a.a > 0 ? a.rgb/a.a : vec3(0.0);
|
||||
vec3 subColor = b.rgb;
|
||||
o_color = vec4(max(na - subColor, vec3(0.0)), 1) * a.a;
|
||||
}
|
||||
@@ -10,12 +10,14 @@ void main() {
|
||||
vec4 b = texture(tex1, v_texCoord0);
|
||||
vec4 color = vec4(0.0);
|
||||
|
||||
vec3 na = a.a == 0.0 ? vec3(0.0) : a.rgb/a.a;
|
||||
vec3 nb = b.a == 0.0 ? vec3(0.0) : b.rgb/b.a;
|
||||
if (a.a > b.a) {
|
||||
color = a;
|
||||
color = vec4(na, 1.0) * (b.a == 0.0? a.a : (1.0-b.a));
|
||||
}
|
||||
|
||||
if (b.a > a.a) {
|
||||
color = b;
|
||||
color = vec4(nb, 1.0) * (a.a == 0.0? b.a : (1.0-a.a));
|
||||
}
|
||||
|
||||
o_color = color;
|
||||
|
||||
Reference in New Issue
Block a user