blob: 69b21c6e2ed6605577733d421c8d0ba28c138921 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
// VERTEX_SHADER:
// coloring.glsl
_OUT_ vec4 final_color;
flat _OUT_ int use_color;
void main() {
gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0);
vUv = vec2(aUv.x, aUv.y);
// We use this shader for both plain glyphs (used as mask)
// and color glpyhs (used as source). The renderer sets
// aColor to vec4(-1) for color glyhs.
if (distance(aColor, vec4(-1)) < 0.001)
use_color = 0;
else
use_color = 1;
final_color = gsk_premultiply(aColor) * u_alpha;
}
// FRAGMENT_SHADER:
// coloring.glsl
_IN_ vec4 final_color;
flat _IN_ int use_color;
void main() {
vec4 diffuse = GskTexture(u_source, vUv);
if (use_color == 1)
gskSetOutputColor(final_color * diffuse.a);
else
gskSetOutputColor(diffuse * u_alpha);
}
|