[orx-fx] Fix Normal blend, add opacity parameters

This commit is contained in:
Edwin Jakobs
2024-07-15 21:46:31 +02:00
parent 81bcf271de
commit bc72991827
2 changed files with 18 additions and 2 deletions

View File

@@ -6,6 +6,7 @@ import org.openrndr.draw.Filter1to1
import org.openrndr.draw.Filter2to1
import org.openrndr.extra.fx.*
import org.openrndr.extra.parameters.BooleanParameter
import org.openrndr.extra.parameters.DoubleParameter
class ColorBurn : Filter2to1(mppFilterShader(fx_color_burn, "color-burn")) {
@BooleanParameter("source clip")
@@ -65,8 +66,16 @@ class Normal : Filter2to1(mppFilterShader(fx_normal, "normal")) {
@BooleanParameter("source clip")
var clip: Boolean by parameters
@DoubleParameter("opacity A", 0.0, 1.0)
var opacityA: Double by parameters
@DoubleParameter("opacity B", 0.0, 1.0)
var opacityB: Double by parameters
init {
clip = false
opacityA = 1.0
opacityB = 1.0
}
}

View File

@@ -8,6 +8,10 @@ uniform sampler2D tex0;
uniform sampler2D tex1;
uniform bool clip;
uniform float opacityA;
uniform float opacityB;
#ifndef OR_GL_FRAGCOLOR
out vec4 o_color;
#endif
@@ -21,14 +25,17 @@ void main() {
vec4 b = texture2D(tex1, v_texCoord0);
#endif
a *= opacityA;
b *= opacityB;
float alpha = min(1.0, max(0.0, b.a));
vec4 result;
if (!clip) {
result = a * (1.0 - alpha) + b;
result.a = clamp(o_color.a, 0.0, 1.0);
result.a = clamp(result.a, 0.0, 1.0);
} else {
result = a * (1.0 - alpha) + b * a.a;
result = a * (1.0 - alpha) + b * clamp(a.a, 0.0, 1.0);
}
#ifdef OR_GL_FRAGCOLOR