odin-lights/assets/shaders/posterizer.glsl

34 lines
888 B
GLSL

#version 330
// Input vertex attributes (from vertex shader)
in vec3 fragPosition;
in vec2 fragTexCoord;
in vec4 fragColor;
in vec3 fragNormal;
// Input uniform values
uniform sampler2D texture0;
uniform sampler2D texture1;
uniform vec4 colDiffuse;
#define POSTERIZE 5.0
out vec4 finalColor;
const int bayer16[16] = int[16](0, 8, 2, 10,
12, 4, 14, 6,
3, 11, 1, 9,
15, 7, 13, 5);
void main() {
vec4 texelColor = texture(texture0, fragTexCoord);
int col = int(mod(gl_FragCoord.x, 4));
int row = int(mod(gl_FragCoord.y, 4));
float threshold = float(bayer16[col + 4 * row]) / 16.0 - 0.5;
texelColor.rgb = clamp(texelColor.rgb + vec3(threshold * 0.1), 0.01, 0.99);
finalColor.a = 1.0;
finalColor.rgb = floor(texelColor.rgb * POSTERIZE) / POSTERIZE;
}