|
- [vert.glsl]
-
- #version 130
-
- attribute vec3 in_Position;
- attribute vec4 in_Color;
- varying vec4 pass_Color;
-
- uniform mat4 proj_matrix;
- uniform mat4 view_matrix;
- uniform mat4 model_matrix;
-
- void main()
- {
- gl_Position = proj_matrix * view_matrix * model_matrix
- * vec4(in_Position, 1.0);
- pass_Color = in_Color;
- }
-
- [frag.glsl]
-
- #version 130
-
- #if defined GL_ES
- precision highp float;
- #endif
-
- varying 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;
- }
-
- [vert.hlsl]
-
- void main(float4 in_Vertex : POSITION,
- float4 in_Color : COLOR,
- uniform float4x4 proj_matrix,
- uniform float4x4 view_matrix,
- uniform float4x4 model_matrix,
- out float4 out_Color : COLOR,
- out float4 out_Position : POSITION)
- {
- out_Position = mul(proj_matrix, mul(view_matrix, mul(model_matrix, in_Vertex)));
- out_Color = in_Color;
- }
-
- [frag.hlsl]
-
- float4x4 bayer = float4x4( 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);
-
- #if 1
- float4x4 cluster = float4x4(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);
- #endif
-
- void main(float4 in_Color : COLOR,
- float4 in_FragCoord : WPOS,
- out float4 out_FragColor : COLOR)
- {
- float4 col = in_Color;
- #if 1
- int x = (int)in_FragCoord.x;
- int y = (int)in_FragCoord.y;
-
- // FIXME: we cannot address this matrix directly on the PS3
- float t = bayer[int(frac(x * 0.25) * 4.0)]
- [int(frac(y * 0.25) * 4.0)];
-
- t = (t + 0.5) / 17.0;
- col.x += frac(t - col.x) - t;
- col.y += frac(t - col.y) - t;
- col.z += frac(t - col.z) - t;
- #endif
- out_FragColor = col;
- }
|