diff options
author | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2016-06-02 15:53:55 +0300 |
---|---|---|
committer | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2016-06-03 18:08:54 +0300 |
commit | 0ae1e5808ada0f418aad7a03d47323c5a8e9f003 (patch) | |
tree | cc2d97f6ecedf62c9c237b64064c1baf051c41e0 /drape | |
parent | 3dff889eb4e1aa49bfd8f7226b7ec80499a33a8e (diff) |
Added support of dashes in route visualization
Diffstat (limited to 'drape')
-rw-r--r-- | drape/drape.pro | 1 | ||||
-rw-r--r-- | drape/shaders/route_dash_fragment_shader.fsh | 39 | ||||
-rw-r--r-- | drape/shaders/shader_index.txt | 1 |
3 files changed, 41 insertions, 0 deletions
diff --git a/drape/drape.pro b/drape/drape.pro index 53603cfc78..0678215e26 100644 --- a/drape/drape.pro +++ b/drape/drape.pro @@ -32,6 +32,7 @@ OTHER_FILES += \ shaders/path_symbol_vertex_shader.vsh \ shaders/position_accuracy3d_shader.vsh \ shaders/route_arrow_fragment_shader.fsh \ + shaders/route_dash_fragment_shader.fsh \ shaders/route_fragment_shader.fsh \ shaders/route_vertex_shader.vsh \ shaders/ruler_vertex_shader.vsh \ diff --git a/drape/shaders/route_dash_fragment_shader.fsh b/drape/shaders/route_dash_fragment_shader.fsh new file mode 100644 index 0000000000..0bdcc0af60 --- /dev/null +++ b/drape/shaders/route_dash_fragment_shader.fsh @@ -0,0 +1,39 @@ +varying vec3 v_length; + +#ifdef SAMSUNG_GOOGLE_NEXUS +uniform sampler2D u_colorTex; +#endif + +uniform vec4 u_color; +uniform vec2 u_pattern; + +const float kAntialiasingThreshold = 0.92; + +float GetAlphaFromPattern(float curLen, float dashLen, float gapLen) +{ + float len = dashLen + gapLen; + float offset = fract(curLen / len) * len; + return step(offset, dashLen); +} + +void main(void) +{ +#ifdef SAMSUNG_GOOGLE_NEXUS + // Because of a bug in OpenGL driver on Samsung Google Nexus this workaround is here. + const float kFakeColorScalar = 0.0; + lowp vec4 fakeColor = texture2D(u_colorTex, vec2(0.0, 0.0)) * kFakeColorScalar; +#endif + + vec4 color = u_color; + if (v_length.x < v_length.z) + color.a = 0.0; + else + color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_length.y))) * + GetAlphaFromPattern(v_length.x, u_pattern.x, u_pattern.y); + +#ifdef SAMSUNG_GOOGLE_NEXUS + gl_FragColor = color + fakeColor; +#else + gl_FragColor = color; +#endif +} diff --git a/drape/shaders/shader_index.txt b/drape/shaders/shader_index.txt index 54b94162c4..ab22b90d05 100644 --- a/drape/shaders/shader_index.txt +++ b/drape/shaders/shader_index.txt @@ -15,6 +15,7 @@ ACCURACY_PROGRAM position_accuracy3d_shader.vsh texturing_fragment_shader.fsh MY_POSITION_PROGRAM my_position_shader.vsh texturing_fragment_shader.fsh BOOKMARK_PROGRAM user_mark.vsh texturing_fragment_shader.fsh ROUTE_PROGRAM route_vertex_shader.vsh route_fragment_shader.fsh +ROUTE_DASH_PROGRAM route_vertex_shader.vsh route_dash_fragment_shader.fsh ROUTE_ARROW_PROGRAM route_vertex_shader.vsh route_arrow_fragment_shader.fsh TRACK_POINT_PROGRAM trackpoint_vertex_shader.vsh trackpoint_fragment_shader.fsh DEBUG_RECT_PROGRAM debug_rect_vertex_shader.vsh debug_rect_fragment_shader.fsh |