diff --git a/orx-jumpflood/build.gradle b/orx-jumpflood/build.gradle index 51e89a48..36506b7e 100644 --- a/orx-jumpflood/build.gradle +++ b/orx-jumpflood/build.gradle @@ -12,6 +12,7 @@ dependencies { implementation project(":orx-fx") demoImplementation project(":orx-noise") demoImplementation project(":orx-gui") + demoImplementation project(":orx-compositor") demoImplementation("org.openrndr:openrndr-core:$openrndrVersion") demoImplementation("org.openrndr:openrndr-extensions:$openrndrVersion") demoImplementation("org.openrndr:openrndr-svg:$openrndrVersion") diff --git a/orx-jumpflood/src/demo/kotlin/DemoInnerGlow01.kt b/orx-jumpflood/src/demo/kotlin/DemoInnerGlow01.kt new file mode 100644 index 00000000..f8efa0ca --- /dev/null +++ b/orx-jumpflood/src/demo/kotlin/DemoInnerGlow01.kt @@ -0,0 +1,38 @@ +import org.openrndr.application +import org.openrndr.color.ColorRGBa +import org.openrndr.extensions.SingleScreenshot +import org.openrndr.extra.compositor.compose +import org.openrndr.extra.compositor.draw +import org.openrndr.extra.compositor.layer +import org.openrndr.extra.compositor.post +import org.openrndr.extra.fx.patterns.Checkers +import org.openrndr.extra.jumpfill.fx.InnerGlow + +fun main() = application { + program { + if (System.getProperty("takeScreenshot") == "true") { + extend(SingleScreenshot()) { + this.outputFile = System.getProperty("screenshotPath") + } + } + val c = compose { + layer { + post(Checkers()) + } + layer { + draw { + drawer.fill = ColorRGBa.PINK.shade(0.5) + drawer.stroke = null + drawer.circle(width / 2.0, height / 2.0, width * 0.35) + } + post(InnerGlow()) { + color = ColorRGBa(-1.0, -1.0, -1.0, 0.25); + width = 30.0 + } + } + } + extend { + c.draw(drawer) + } + } +} \ No newline at end of file diff --git a/orx-jumpflood/src/demo/kotlin/DemoInnerGlow02.kt b/orx-jumpflood/src/demo/kotlin/DemoInnerGlow02.kt new file mode 100644 index 00000000..dcdec0ab --- /dev/null +++ b/orx-jumpflood/src/demo/kotlin/DemoInnerGlow02.kt @@ -0,0 +1,38 @@ +import org.openrndr.application +import org.openrndr.color.ColorRGBa +import org.openrndr.extensions.SingleScreenshot +import org.openrndr.extra.compositor.compose +import org.openrndr.extra.compositor.draw +import org.openrndr.extra.compositor.layer +import org.openrndr.extra.compositor.post +import org.openrndr.extra.fx.patterns.Checkers +import org.openrndr.extra.jumpfill.fx.InnerGlow + +fun main() = application { + program { + if (System.getProperty("takeScreenshot") == "true") { + extend(SingleScreenshot()) { + this.outputFile = System.getProperty("screenshotPath") + } + } + val c = compose { + layer { + post(Checkers()) + } + layer { + draw { + drawer.fill = ColorRGBa.PINK.shade(0.5) + drawer.stroke = null + drawer.circle(width / 2.0, height / 2.0, width * 0.35) + } + post(InnerGlow()) { + color = ColorRGBa(1.0, 1.0, 1.0, 0.25); + width = 30.0 + } + } + } + extend { + c.draw(drawer) + } + } +} \ No newline at end of file diff --git a/orx-jumpflood/src/main/resources/shaders/gl3/fx/inner-glow.frag b/orx-jumpflood/src/main/resources/shaders/gl3/fx/inner-glow.frag index 335ad983..285003ca 100644 --- a/orx-jumpflood/src/main/resources/shaders/gl3/fx/inner-glow.frag +++ b/orx-jumpflood/src/main/resources/shaders/gl3/fx/inner-glow.frag @@ -27,6 +27,13 @@ void main() { vec2 h = hash22(v_texCoord0)*10.0; float e = exp(-( pow((d+h.x*noise)*1.0/width, shape)) ); - o_color = original * imageOpacity + original.a* vec4(color.rgb, 1.0) * e * color.a; - o_color.a = max(o_color.a, 1.0); + + vec3 norginal = original.a > 0.0 ? original.rgb / original.a : vec3(0.0); + + vec3 add = norginal + color.rgb * e * color.a; + o_color = vec4(add, 1.0) * original.a; + +// //o_color = original * imageOpacity + original.a* vec4(color.rgb, 1.0) * e * color.a; +// o_color.rgb = max(vec3(0.0), o_color.rgb); +// o_color.a = min(o_color.a, 1.0); } \ No newline at end of file