From bc7299182777566b71e8535b5427ab980ea68655 Mon Sep 17 00:00:00 2001 From: Edwin Jakobs Date: Mon, 15 Jul 2024 21:46:31 +0200 Subject: [PATCH] [orx-fx] Fix Normal blend, add opacity parameters --- orx-fx/src/commonMain/kotlin/blend/BlendFilters.kt | 9 +++++++++ orx-fx/src/shaders/glsl/blend/normal.frag | 11 +++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/orx-fx/src/commonMain/kotlin/blend/BlendFilters.kt b/orx-fx/src/commonMain/kotlin/blend/BlendFilters.kt index f0a04a36..c72d0738 100644 --- a/orx-fx/src/commonMain/kotlin/blend/BlendFilters.kt +++ b/orx-fx/src/commonMain/kotlin/blend/BlendFilters.kt @@ -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 } } diff --git a/orx-fx/src/shaders/glsl/blend/normal.frag b/orx-fx/src/shaders/glsl/blend/normal.frag index 6ea8e99c..cd9f6a5e 100644 --- a/orx-fx/src/shaders/glsl/blend/normal.frag +++ b/orx-fx/src/shaders/glsl/blend/normal.frag @@ -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