|
- [vert.glsl]
-
- #version 130
-
- in vec3 in_position;
- in vec4 in_color;
-
- uniform mat4 u_projection;
- uniform mat4 u_view;
- uniform mat4 u_model;
-
- out vec4 pass_color;
-
- void main()
- {
- gl_Position = u_projection * u_view * u_model
- * vec4(in_position, 1.0);
- pass_color = in_color;
- }
-
- [frag.glsl]
-
- #version 130
-
- #if defined GL_ES
- precision highp float;
- #endif
-
- in vec4 pass_color;
-
- mat4 bayer = mat4( 0.0, 12.0, 3.0, 15.0,
- 8.0, 4.0, 11.0, 7.0,
- 2.0, 14.0, 1.0, 13.0,
- 10.0, 6.0, 9.0, 5.0);
-
- mat4 cluster = mat4(12.0, 5.0, 6.0, 13.0,
- 4.0, 0.0, 1.0, 7.0,
- 11.0, 3.0, 2.0, 8.0,
- 15.0, 10.0, 9.0, 14.0);
-
- float rand(vec2 p)
- {
- return fract(sin(dot(p, vec2(12.9898, 78.2333))) * 123.4567);
- }
-
- void main()
- {
- vec4 col = pass_color;
- #if defined GL_ES
- int dx = int(mod(gl_FragCoord.x, 4.0));
- int dy = int(mod(gl_FragCoord.y, 4.0));
- float t;
- if (dx == 0)
- {
- if (dy == 0) t = cluster[0][0]; else if (dy == 1) t = cluster[0][1]; else if (dy == 2) t = cluster[0][2]; else t = cluster[0][3];
- }
- else if (dx == 1)
- {
- if (dy == 0) t = cluster[1][0]; else if (dy == 1) t = cluster[1][1]; else if (dy == 2) t = cluster[1][2]; else t = cluster[1][3];
- }
- else if (dx == 2)
- {
- if (dy == 0) t = cluster[2][0]; else if (dy == 1) t = cluster[2][1]; else if (dy == 2) t = cluster[2][2]; else t = cluster[2][3];
- }
- else
- {
- if (dy == 0) t = cluster[3][0]; else if (dy == 1) t = cluster[3][1]; else if (dy == 2) t = cluster[3][2]; else t = cluster[3][3];
- }
- #else
- float t = cluster[int(mod(gl_FragCoord.x, 4.0))]
- [int(mod(gl_FragCoord.y, 4.0))];
- #endif
- t += rand(gl_FragCoord.xy) - 0.5;
- t = (t + 0.5) / 17.0;
- col.x += fract(t - col.x) - t;
- col.y += fract(t - col.y) - t;
- col.z += fract(t - col.z) - t;
- gl_FragColor = col;
- }
|