diff --git a/orx-jumpflood/src/main/kotlin/ops/SDFOps.kt b/orx-jumpflood/src/main/kotlin/ops/SDFOps.kt index 6878a6d8..f7055ce5 100644 --- a/orx-jumpflood/src/main/kotlin/ops/SDFOps.kt +++ b/orx-jumpflood/src/main/kotlin/ops/SDFOps.kt @@ -84,3 +84,19 @@ class SDFOnion : Filter(filterShaderFromUrl(resourceUrl("/shaders/gl3/ops/sdf-on super.apply(source, target) } } + +class SDFBlend : Filter(filterShaderFromUrl(resourceUrl("/shaders/gl3/ops/sdf-blend.frag"))) { + var factor: Double by parameters + + init { + factor = 0.5 + } + + override fun apply(source: Array, target: Array) { + require(target[0].type == ColorType.FLOAT16 || target[0].type == ColorType.FLOAT32) { + "needs a floating point target" + } + super.apply(source, target) + } + +} diff --git a/orx-jumpflood/src/main/resources/shaders/gl3/ops/sdf-blend.frag b/orx-jumpflood/src/main/resources/shaders/gl3/ops/sdf-blend.frag new file mode 100644 index 00000000..80ba0e79 --- /dev/null +++ b/orx-jumpflood/src/main/resources/shaders/gl3/ops/sdf-blend.frag @@ -0,0 +1,15 @@ +#version 330 core + +uniform sampler2D tex0;// signed distance +uniform sampler2D tex1;// signed distance +uniform float factor; + +in vec2 v_texCoord0; +out vec4 o_color; + +void main() { + float d0 = texture(tex0, v_texCoord0).r; + float d1 = texture(tex1, v_texCoord0).r; + float d = mix(d0, d1, factor); + o_color = vec4(d, 0.0, 0.0, 1.0); +} \ No newline at end of file