UNPKG

2.74 kBPlain TextView Raw
1#ifdef GL_ES
2 precision highp float;
3#endif
4uniform lowp float u_device_pixel_ratio;
5uniform vec2 u_texsize;
6uniform float u_fade;
7uniform mediump vec3 u_scale;
8
9uniform sampler2D u_image;
10
11varying vec2 v_normal;
12varying vec2 v_width2;
13varying float v_linesofar;
14varying float v_gamma_scale;
15varying float v_width;
16
17#pragma mapbox: define lowp vec4 pattern_from
18#pragma mapbox: define lowp vec4 pattern_to
19#pragma mapbox: define lowp float pixel_ratio_from
20#pragma mapbox: define lowp float pixel_ratio_to
21#pragma mapbox: define lowp float blur
22#pragma mapbox: define lowp float opacity
23
24void main() {
25 #pragma mapbox: initialize mediump vec4 pattern_from
26 #pragma mapbox: initialize mediump vec4 pattern_to
27 #pragma mapbox: initialize lowp float pixel_ratio_from
28 #pragma mapbox: initialize lowp float pixel_ratio_to
29
30 #pragma mapbox: initialize lowp float blur
31 #pragma mapbox: initialize lowp float opacity
32
33 vec2 pattern_tl_a = pattern_from.xy;
34 vec2 pattern_br_a = pattern_from.zw;
35 vec2 pattern_tl_b = pattern_to.xy;
36 vec2 pattern_br_b = pattern_to.zw;
37
38 float tileZoomRatio = u_scale.x;
39 float fromScale = u_scale.y;
40 float toScale = u_scale.z;
41
42 vec2 display_size_a = (pattern_br_a - pattern_tl_a) / pixel_ratio_from;
43 vec2 display_size_b = (pattern_br_b - pattern_tl_b) / pixel_ratio_to;
44
45 vec2 pattern_size_a = vec2(display_size_a.x * fromScale / tileZoomRatio, display_size_a.y);
46 vec2 pattern_size_b = vec2(display_size_b.x * toScale / tileZoomRatio, display_size_b.y);
47
48 float aspect_a = display_size_a.y / v_width;
49 float aspect_b = display_size_b.y / v_width;
50
51 // Calculate the distance of the pixel from the line in pixels.
52 float dist = length(v_normal) * v_width2.s;
53
54 // Calculate the antialiasing fade factor. This is either when fading in
55 // the line in case of an offset line (v_width2.t) or when fading out
56 // (v_width2.s)
57 float blur2 = (blur + 1.0 / u_device_pixel_ratio) * v_gamma_scale;
58 float alpha = clamp(min(dist - (v_width2.t - blur2), v_width2.s - dist) / blur2, 0.0, 1.0);
59
60 float x_a = mod(v_linesofar / pattern_size_a.x * aspect_a, 1.0);
61 float x_b = mod(v_linesofar / pattern_size_b.x * aspect_b, 1.0);
62
63 float y = 0.5 * v_normal.y + 0.5;
64
65 vec2 texel_size = 1.0 / u_texsize;
66
67 vec2 pos_a = mix(pattern_tl_a * texel_size - texel_size, pattern_br_a * texel_size + texel_size, vec2(x_a, y));
68 vec2 pos_b = mix(pattern_tl_b * texel_size - texel_size, pattern_br_b * texel_size + texel_size, vec2(x_b, y));
69
70 vec4 color = mix(texture2D(u_image, pos_a), texture2D(u_image, pos_b), u_fade);
71
72 gl_FragColor = color * alpha * opacity;
73
74#ifdef OVERDRAW_INSPECTOR
75 gl_FragColor = vec4(1.0);
76#endif
77}