Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/drape
diff options
context:
space:
mode:
authorr.kuznetsov <r.kuznetsov@corp.mail.ru>2016-06-02 15:53:55 +0300
committerr.kuznetsov <r.kuznetsov@corp.mail.ru>2016-06-03 18:08:54 +0300
commit0ae1e5808ada0f418aad7a03d47323c5a8e9f003 (patch)
treecc2d97f6ecedf62c9c237b64064c1baf051c41e0 /drape
parent3dff889eb4e1aa49bfd8f7226b7ec80499a33a8e (diff)
Added support of dashes in route visualization
Diffstat (limited to 'drape')
-rw-r--r--drape/drape.pro1
-rw-r--r--drape/shaders/route_dash_fragment_shader.fsh39
-rw-r--r--drape/shaders/shader_index.txt1
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