source: trunk/src/gradient.lolfx @ 1941

Last change on this file since 1941 was 1941, checked in by sam, 8 years ago

core: port gradient shader to GL ES platforms.

File size: 3.2 KB
Line 
1[vert.glsl]
2
3#version 130
4
5attribute vec3 in_Vertex;
6attribute vec4 in_Color;
7varying vec4 pass_Color;
8
9uniform mat4 proj_matrix;
10uniform mat4 view_matrix;
11uniform mat4 model_matrix;
12
13void main()
14{
15    gl_Position = proj_matrix * view_matrix * model_matrix
16                * vec4(in_Vertex, 1.0);
17    pass_Color = in_Color;
18}
19
20[frag.glsl]
21
22#version 130
23
24#if defined GL_ES
25precision highp float;
26#endif
27
28varying vec4 pass_Color;
29
30mat4 bayer = mat4( 0.0, 12.0,  3.0, 15.0,
31                   8.0,  4.0, 11.0,  7.0,
32                   2.0, 14.0,  1.0, 13.0,
33                  10.0,  6.0,  9.0,  5.0);
34
35mat4 cluster = mat4(12.0,  5.0,  6.0, 13.0,
36                     4.0,  0.0,  1.0,  7.0,
37                    11.0,  3.0,  2.0,  8.0,
38                    15.0, 10.0,  9.0, 14.0);
39
40void main()
41{
42    vec4 col = pass_Color;
43#if defined GL_ES
44    int dx = int(mod(gl_FragCoord.x, 4.0));
45    int dy = int(mod(gl_FragCoord.y, 4.0));
46    /* Cluster */
47    float t;
48    if (dx == 0)
49    {
50        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];
51    }
52    else if (dx == 1)
53    {
54        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];
55    }
56    else if (dx == 2)
57    {
58        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];
59    }
60    else
61    {
62        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];
63    }
64#else
65    float t = cluster[int(mod(gl_FragCoord.x, 4.0))]
66                     [int(mod(gl_FragCoord.y, 4.0))];
67#endif
68    t = (t + 0.5) / 17.0;
69    col.x += fract(t - col.x) - t;
70    col.y += fract(t - col.y) - t;
71    col.z += fract(t - col.z) - t;
72    gl_FragColor = col;
73}
74
75[vert.hlsl]
76
77void main(float4 in_Vertex : POSITION,
78          float4 in_Color : COLOR,
79          uniform float4x4 proj_matrix,
80          uniform float4x4 view_matrix,
81          uniform float4x4 model_matrix,
82          out float4 out_Color : COLOR,
83          out float4 out_Position : POSITION)
84{
85    out_Position = mul(proj_matrix, mul(view_matrix, mul(model_matrix, in_Vertex)));
86    out_Color = in_Color;
87}
88
89[frag.hlsl]
90
91float4x4 bayer = float4x4( 0.0, 12.0,  3.0, 15.0,
92                           8.0,  4.0, 11.0,  7.0,
93                           2.0, 14.0,  1.0, 13.0,
94                          10.0,  6.0,  9.0,  5.0);
95
96#if 1
97float4x4 cluster = float4x4(12.0,  5.0,  6.0, 13.0,
98                             4.0,  0.0,  1.0,  7.0,
99                            11.0,  3.0,  2.0,  8.0,
100                            15.0, 10.0,  9.0, 14.0);
101#endif
102
103void main(float4 in_Color : COLOR,
104          float4 in_FragCoord : WPOS,
105          out float4 out_FragColor : COLOR)
106{
107    float4 col = in_Color;
108#if 1
109    int x = (int)in_FragCoord.x;
110    int y = (int)in_FragCoord.y;
111
112    // FIXME: we cannot address this matrix directly on the PS3
113    float t = bayer[int(frac(x * 0.25) * 4.0)]
114                   [int(frac(y * 0.25) * 4.0)];
115
116    t = (t + 0.5) / 17.0;
117    col.x += frac(t - col.x) - t;
118    col.y += frac(t - col.y) - t;
119    col.z += frac(t - col.z) - t;
120#endif
121    out_FragColor = col;
122}
123
Note: See TracBrowser for help on using the repository browser.