glsl-dither
Version:
Bayer matrix dithering in GLSL
54 lines (37 loc) • 1.73 kB
Markdown
# glsl-dither [](http://github.com/badges/stability-badges)
Bayer matrix dithering in GLSL.
Originally sourced from [@oosmoxiecode](http://github.com/oosmoxiecode)'s
[C64 Shader Demo](http://oos.moxiecode.com/js_webgl/c64_shader/), which
in turn was based on the implementation in
[this article](http://devlog-martinsh.blogspot.se/2011/03/glsl-8x8-bayer-matrix-dithering.html).
[](http://hughsk.io/glsl-dither)
## Usage
[](https://nodei.co/npm/glsl-dither/)
Each dithering function takes two arguments:
* `pos`: the position of the current pixel – you can use `gl_FragCoord.xy`
directly in most cases.
* `brightness`: the current pixel's brightness, either as a `float` or
a `vec3|vec4` color directly.
The returned value will be the same type as the `brightness` parameter.
### `dither8x8(vec2 pos, vec3|vec4|float brightness)`
Dither using a 8x8 matrix.
### `dither4x4(vec2 pos, vec3|vec4|float brightness)`
Dither using a 4x4 matrix.
### `dither2x2(vec2 pos, vec3|vec4|float brightness)`
Dither using a 2x2 matrix.
``` glsl
precision mediump float;
uniform sampler2D uTexture;
varying vec2 vUv;
// Use any of the following:
#pragma glslify: dither = require(glsl-dither)
#pragma glslify: dither = require(glsl-dither/8x8)
#pragma glslify: dither = require(glsl-dither/4x4)
#pragma glslify: dither = require(glsl-dither/2x2)
void main() {
vec4 color = texture2D(uTexture, vUv);
gl_FragColor = dither(gl_FragCoord.xy, color);
}
```
## License
MIT. See [LICENSE.md](http://github.com/hughsk/glsl-dither/blob/master/LICENSE.md) for details.