diff --git a/orx-jumpflood/src/main/kotlin/JumpFlood.kt b/orx-jumpflood/src/main/kotlin/JumpFlood.kt index 79cb8993..339c1b02 100644 --- a/orx-jumpflood/src/main/kotlin/JumpFlood.kt +++ b/orx-jumpflood/src/main/kotlin/JumpFlood.kt @@ -12,10 +12,14 @@ class JumpFlood : Filter(filterShaderFromUrl(resourceUrl("/shaders/gl3/jumpflood } class PixelDistance : Filter(filterShaderFromUrl(resourceUrl("/shaders/gl3/pixel-distance.frag"))) +class ContourPoints : Filter(filterShaderFromUrl(resourceUrl("/shaders/gl3/contour-points.frag"))) +class Threshold : Filter(filterShaderFromUrl(resourceUrl("/shaders/gl3/threshold.frag"))) val encodePoints by lazy { EncodePoints() } val jumpFlood by lazy { JumpFlood() } val pixelDistance by lazy { PixelDistance() } +val contourPoints by lazy { ContourPoints() } +val threshold by lazy { Threshold() } /** [points] is square and power of 2 */ fun jumpFlood(points: ColorBuffer, coordinates: List) { diff --git a/orx-jumpflood/src/main/resources/shaders/gl3/contour-points.frag b/orx-jumpflood/src/main/resources/shaders/gl3/contour-points.frag new file mode 100644 index 00000000..8c654ac3 --- /dev/null +++ b/orx-jumpflood/src/main/resources/shaders/gl3/contour-points.frag @@ -0,0 +1,24 @@ +#version 330 core + +uniform sampler2D tex0; +in vec2 v_texCoord0; + +out vec4 o_color; + +void main() { + vec2 step = 1.0 / textureSize(tex0, 0); + float ref = step(0.5 , texture(tex0, v_texCoord0).r); + vec4 outc = vec4(-1.0, -1.0, 0.0, 1.0); + + float contour = 0.0; + for (int y = -1; y <= 1; ++y) { + for (int x = -1; x <= 1; ++x) { + float smp = step(0.5, texture(tex0, v_texCoord0 + vec2(x,y) * step).r); + if (smp != ref) { + contour = 1.0; + } + } + } + + o_color = vec4(contour, contour, contour, 1.0); +} \ No newline at end of file diff --git a/orx-jumpflood/src/main/resources/shaders/gl3/threshold.frag b/orx-jumpflood/src/main/resources/shaders/gl3/threshold.frag new file mode 100644 index 00000000..381e91f7 --- /dev/null +++ b/orx-jumpflood/src/main/resources/shaders/gl3/threshold.frag @@ -0,0 +1,13 @@ +#version 330 core + +uniform sampler2D tex0; +in vec2 v_texCoord0; +uniform float threshold; +out vec4 o_color; + +void main() { + float ref = step(threshold , dot( vec3(1.0/3.0), texture(tex0, v_texCoord0).rgb )); + + + o_color = vec4(ref, ref, ref, 1.0); +} \ No newline at end of file