Merge branch 'reinvdwoerd-master'
This commit is contained in:
30
orx-fx/src/main/kotlin/dither/Crosshatch.kt
Normal file
30
orx-fx/src/main/kotlin/dither/Crosshatch.kt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package org.openrndr.extra.fx.dither
|
||||||
|
|
||||||
|
import org.openrndr.draw.Filter
|
||||||
|
import org.openrndr.draw.Shader
|
||||||
|
import org.openrndr.extra.fx.filterFragmentCode
|
||||||
|
import org.openrndr.extra.parameters.Description
|
||||||
|
import org.openrndr.extra.parameters.DoubleParameter
|
||||||
|
|
||||||
|
|
||||||
|
@Description("Crosshatch")
|
||||||
|
class Crosshatch: Filter(Shader.createFromCode(filterVertexCode, filterFragmentCode("dither/crosshatch.frag"))) {
|
||||||
|
@DoubleParameter("threshold 1", 0.0, 1.0)
|
||||||
|
var t1: Double by parameters
|
||||||
|
|
||||||
|
@DoubleParameter("threshold 2", 0.0, 1.0)
|
||||||
|
var t2: Double by parameters
|
||||||
|
|
||||||
|
@DoubleParameter("threshold 3", 0.0, 1.0)
|
||||||
|
var t3: Double by parameters
|
||||||
|
|
||||||
|
@DoubleParameter("threshold 4", 0.0, 1.0)
|
||||||
|
var t4: Double by parameters
|
||||||
|
|
||||||
|
init {
|
||||||
|
t1 = 1.0
|
||||||
|
t2 = 0.75
|
||||||
|
t3 = 0.5
|
||||||
|
t4 = 0.3
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 v_texCoord0;
|
||||||
|
uniform sampler2D tex0;
|
||||||
|
out vec4 o_color;
|
||||||
|
|
||||||
|
// thresholds
|
||||||
|
uniform float t1;
|
||||||
|
uniform float t2;
|
||||||
|
uniform float t3;
|
||||||
|
uniform float t4;
|
||||||
|
|
||||||
|
|
||||||
|
// glsl-luma
|
||||||
|
float luma(vec3 color) {
|
||||||
|
return dot(color, vec3(0.299, 0.587, 0.114));
|
||||||
|
}
|
||||||
|
|
||||||
|
float luma(vec4 color) {
|
||||||
|
return dot(color.rgb, vec3(0.299, 0.587, 0.114));
|
||||||
|
}
|
||||||
|
|
||||||
|
// glsl-crosshatch
|
||||||
|
vec3 crosshatch(vec3 texColor, float t1, float t2, float t3, float t4) {
|
||||||
|
float lum = luma(texColor);
|
||||||
|
vec3 color = vec3(1.0);
|
||||||
|
if (lum < t1) {
|
||||||
|
if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) {
|
||||||
|
color = vec3(0.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lum < t2) {
|
||||||
|
if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) {
|
||||||
|
color = vec3(0.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lum < t3) {
|
||||||
|
if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0) {
|
||||||
|
color = vec3(0.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lum < t4) {
|
||||||
|
if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0) {
|
||||||
|
color = vec3(0.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec4 color = texture(tex0, v_texCoord0);
|
||||||
|
vec3 demultiplied = color.a == 0.0 ? vec3(0.0) : color.rgb/color.a;
|
||||||
|
o_color = vec4(crosshatch(demultiplied, t1, t2, t3, t4), 1.0) * color.a;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user