From 3d45310961f74cb87f7ec8ca3cc4ac86f3a9d6c3 Mon Sep 17 00:00:00 2001 From: Edwin Jakobs Date: Thu, 19 Mar 2020 23:47:15 +0100 Subject: [PATCH] Bump OPENRNDR to 0.3.40-rc.4 --- build.gradle | 4 +- .../src/main/kotlin/{ => fx}/InnerBevel.kt | 5 +- orx-jumpflood/src/main/kotlin/fx/InnerGlow.kt | 79 +++++++++++++++++++ .../src/main/kotlin/{ => fx}/OuterGlow.kt | 7 +- .../resources/shaders/gl3/fx/inner-glow.frag | 32 ++++++++ 5 files changed, 122 insertions(+), 5 deletions(-) rename orx-jumpflood/src/main/kotlin/{ => fx}/InnerBevel.kt (91%) create mode 100644 orx-jumpflood/src/main/kotlin/fx/InnerGlow.kt rename orx-jumpflood/src/main/kotlin/{ => fx}/OuterGlow.kt (89%) create mode 100644 orx-jumpflood/src/main/resources/shaders/gl3/fx/inner-glow.frag diff --git a/build.gradle b/build.gradle index 65f663d2..a3118aec 100644 --- a/build.gradle +++ b/build.gradle @@ -15,8 +15,8 @@ buildscript { apply plugin: 'org.jetbrains.dokka' project.ext { - openrndrVersion = "0.3.39" - panelVersion = "0.4.0-SNAPSHOT" + openrndrVersion = "0.3.40-rc.4" + panelVersion = "0.3.22-rc.2" kotlinVersion = "1.3.70" spekVersion = "2.0.9" libfreenectVersion = "0.5.7-1.5.2" diff --git a/orx-jumpflood/src/main/kotlin/InnerBevel.kt b/orx-jumpflood/src/main/kotlin/fx/InnerBevel.kt similarity index 91% rename from orx-jumpflood/src/main/kotlin/InnerBevel.kt rename to orx-jumpflood/src/main/kotlin/fx/InnerBevel.kt index 4bf33aaf..750f7a01 100644 --- a/orx-jumpflood/src/main/kotlin/InnerBevel.kt +++ b/orx-jumpflood/src/main/kotlin/fx/InnerBevel.kt @@ -1,6 +1,9 @@ -package org.openrndr.extra.jumpfill +package org.openrndr.extra.jumpfill.fx import org.openrndr.draw.* +import org.openrndr.extra.jumpfill.EncodeSubpixel +import org.openrndr.extra.jumpfill.JumpFlooder +import org.openrndr.extra.jumpfill.PixelDirection import org.openrndr.extra.parameters.Description import org.openrndr.extra.parameters.DoubleParameter import org.openrndr.math.Vector2 diff --git a/orx-jumpflood/src/main/kotlin/fx/InnerGlow.kt b/orx-jumpflood/src/main/kotlin/fx/InnerGlow.kt new file mode 100644 index 00000000..7b39d1b2 --- /dev/null +++ b/orx-jumpflood/src/main/kotlin/fx/InnerGlow.kt @@ -0,0 +1,79 @@ +package org.openrndr.extra.jumpfill.fx + +import org.openrndr.color.ColorRGBa +import org.openrndr.draw.* +import org.openrndr.extra.jumpfill.EncodeSubpixel +import org.openrndr.extra.jumpfill.JumpFlooder +import org.openrndr.extra.jumpfill.PixelDirection +import org.openrndr.extra.parameters.ColorParameter +import org.openrndr.extra.parameters.Description +import org.openrndr.extra.parameters.DoubleParameter +import org.openrndr.math.Vector2 +import org.openrndr.resourceUrl + +private class InnerGlowFilter : Filter(filterShaderFromUrl(resourceUrl("/shaders/gl3/fx/inner-glow.frag"))) { + var angle: Double by parameters + var width: Double by parameters + + var noise: Double by parameters + var color: ColorRGBa by parameters + + var shape: Double by parameters + var imageOpacity: Double by parameters + + init { + angle = 0.0 + width = 5.0 + noise = 0.0 + shape = 1.0 + imageOpacity = 1.0 + } +} + +@Description("Outer glow") +class InnerGlow : Filter() { + @DoubleParameter("width", 0.0, 50.0) + var width = 5.0 + + @DoubleParameter("noise", 0.0, 1.0) + var noise = 0.1 + + @DoubleParameter("shape", 0.0, 10.0) + var shape = 1.0 + + @DoubleParameter("opacity", 0.0, 1.0) + var opacity = 1.0 + + @DoubleParameter("image opacity", 0.0, 1.0) + var imageOpacity = 1.0 + + + @ColorParameter("color") + var color = ColorRGBa.WHITE + + private var jumpFlooder: JumpFlooder? = null + private val decodeFilter = PixelDirection() + private val glowFilter = InnerGlowFilter() + + private var distance: ColorBuffer? = null + + override fun apply(source: Array, target: Array) { + if (jumpFlooder == null) { + jumpFlooder = JumpFlooder(target[0].width, target[0].height, encodePoints = EncodeSubpixel()) + } + if (distance == null) { + distance = colorBuffer(target[0].width, target[0].height, type = ColorType.FLOAT32) + } + val result = jumpFlooder!!.jumpFlood(source[0]) + decodeFilter.originalSize = Vector2(target[0].width * 1.0, target[0].height * 1.0) + decodeFilter.distanceScale = 1.0 + decodeFilter.apply(result, result) + result.copyTo(distance!!) + glowFilter.color = color.opacify(opacity) + glowFilter.width = width + glowFilter.noise = noise + glowFilter.shape = shape + glowFilter.imageOpacity = imageOpacity + glowFilter.apply(arrayOf(source[0], distance!!), target[0]) + } +} \ No newline at end of file diff --git a/orx-jumpflood/src/main/kotlin/OuterGlow.kt b/orx-jumpflood/src/main/kotlin/fx/OuterGlow.kt similarity index 89% rename from orx-jumpflood/src/main/kotlin/OuterGlow.kt rename to orx-jumpflood/src/main/kotlin/fx/OuterGlow.kt index 906905d0..5b66edc5 100644 --- a/orx-jumpflood/src/main/kotlin/OuterGlow.kt +++ b/orx-jumpflood/src/main/kotlin/fx/OuterGlow.kt @@ -1,7 +1,10 @@ -package org.openrndr.extra.jumpfill +package org.openrndr.extra.jumpfill.fx import org.openrndr.color.ColorRGBa import org.openrndr.draw.* +import org.openrndr.extra.jumpfill.EncodeSubpixel +import org.openrndr.extra.jumpfill.JumpFlooder +import org.openrndr.extra.jumpfill.PixelDirection import org.openrndr.extra.parameters.ColorParameter import org.openrndr.extra.parameters.Description import org.openrndr.extra.parameters.DoubleParameter @@ -50,7 +53,7 @@ class OuterGlow : Filter() { private var jumpFlooder: JumpFlooder? = null private val decodeFilter = PixelDirection() - private val glowFilter = OuterGlowFilter() + private val glowFilter = org.openrndr.extra.jumpfill.fx.OuterGlowFilter() private var distance: ColorBuffer? = null 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 new file mode 100644 index 00000000..335ad983 --- /dev/null +++ b/orx-jumpflood/src/main/resources/shaders/gl3/fx/inner-glow.frag @@ -0,0 +1,32 @@ +#version 330 core + +uniform sampler2D tex0; // image +uniform sampler2D tex1; // distance + +uniform float width; +uniform float noise; +uniform vec4 color; +uniform float shape; +uniform float imageOpacity; +in vec2 v_texCoord0; + +out vec4 o_color; +#define HASHSCALE 443.8975 +vec2 hash22(vec2 p) { + vec3 p3 = fract(vec3(p.xyx) * HASHSCALE); + p3 += dot(p3, p3.yzx+19.19); + return fract(vec2((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y)); +} + +void main() { + vec4 original = texture(tex0, v_texCoord0); + vec2 step = 1.0 / textureSize(tex0, 0); + vec2 distance = texture(tex1, v_texCoord0).rg; + float d = length(distance); + vec2 n = normalize(distance); + + 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); +} \ No newline at end of file