gl_FragColor = vec4(v_color.rgb, 1.0); } """ borders = Filter( 1024, 1024, """ const float epsilon = 1e-3; vec4 filter(sampler2D original, sampler2D filtered, vec2 texcoord, vec2 texsize) { vec4 center = texture2D(filtered, texcoord); vec4 left = texture2D(filtered, texcoord + vec2(-1.0, 0.0)/texsize); vec4 right = texture2D(filtered, texcoord + vec2(+1.0, 0.0)/texsize); vec4 down = texture2D(filtered, texcoord + vec2( 0.0,-1.0)/texsize); vec4 up = texture2D(filtered, texcoord + vec2( 0.0,+1.0)/texsize); vec4 black = vec4(0,0,0,1); float level = 0.5; if (length(center-left) > epsilon) { return mix(black,right, level); } else if (length(center-right) > epsilon) { return mix(black, left, level); } else if (length(center-down) > epsilon) { return mix(black, up, level); } else if (length(center-up) > epsilon) { return mix(black, down, level); } return center; } """) window = app.Window(width=1024, height=1024)
cube_fragment = """ uniform sampler2D texture; varying vec2 v_texcoord; void main() { float r = texture2D(texture, v_texcoord).r; gl_FragColor = vec4(vec3(r),1.0); } """ pixelate = Filter( 512, 512, """ uniform float level; vec4 filter(sampler2D original, sampler2D filtered, vec2 texcoord, vec2 texsize) { vec2 uv = (texcoord * level); uv = (uv - fract(uv)) / level; return texture2D(filtered, uv); } """) pixelate["level"] = 256.0 window = app.Window(1024, 1024) @window.event def on_draw(dt): global phi, theta with pixelate: window.clear()
+ 0.3162162162 * (texture2D( filtered, texcoord + vec2(0.0, 1.3846153846)/texsize) + texture2D( filtered, texcoord - vec2(0.0, 1.3846153846)/texsize) ) + 0.0702702703 * (texture2D( filtered, texcoord + vec2(0.0, 3.2307692308)/texsize) + texture2D( filtered, texcoord - vec2(0.0, 3.2307692308)/texsize) ); }""") HBlur = gloo.Snippet(""" vec4 filter(sampler2D original, sampler2D filtered, vec2 texcoord, vec2 texsize) { return 0.2270270270 * texture2D( filtered, texcoord) + 0.3162162162 * (texture2D( filtered, texcoord + vec2(1.3846153846, 0.0)/texsize) + texture2D( filtered, texcoord - vec2(1.3846153846, 0.0)/texsize) ) + 0.0702702703 * (texture2D( filtered, texcoord + vec2(3.2307692308, 0.0)/texsize) + texture2D( filtered, texcoord - vec2(3.2307692308, 0.0)/texsize) ); }""") GaussianBlur = Filter(512, 512, VBlur, HBlur) @window.event def on_draw(dt): global phi, theta with GaussianBlur: window.clear() gl.glEnable(gl.GL_DEPTH_TEST) cube.draw(gl.GL_TRIANGLES, faces) theta += 0.5 # degrees phi += 0.5 # degrees model = np.eye(4, dtype=np.float32) glm.rotate(model, theta, 0, 0, 1)
return texture2D(filtered, uv); } """) sepia = gloo.Snippet(""" vec4 filter(vec4 color) { return vec4( dot(color.rgb, vec3(.393, .769, .189)), dot(color.rgb, vec3(.349, .686, .168)), dot(color.rgb, vec3(.272, .534, .131)), color.a ); } vec4 filter(sampler2D original, sampler2D filtered, vec2 texcoord, vec2 texsize) { return filter( texture2D(filtered, texcoord) ); } """) compose = Filter(512, 512, sepia(pixelate)) compose["level"] = 128.0 window = app.Window(1024, 1024) @window.event def on_draw(dt): global phi, theta with compose: window.clear() gl.glEnable(gl.GL_DEPTH_TEST) cube.draw(gl.GL_TRIANGLES, faces) theta += 0.5 phi += 0.5