1 | #ifdef GL_ES
|
2 | precision highp float;
|
3 | #endif
|
4 | uniform lowp float u_device_pixel_ratio;
|
5 | uniform vec2 u_texsize;
|
6 | uniform float u_fade;
|
7 | uniform mediump vec3 u_scale;
|
8 |
|
9 | uniform sampler2D u_image;
|
10 |
|
11 | varying vec2 v_normal;
|
12 | varying vec2 v_width2;
|
13 | varying float v_linesofar;
|
14 | varying float v_gamma_scale;
|
15 | varying 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 |
|
24 | void 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 |
|
52 | float dist = length(v_normal) * v_width2.s;
|
53 |
|
54 |
|
55 |
|
56 |
|
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 | }
|