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-08-12 13:01:35 +0300
committerr.kuznetsov <r.kuznetsov@corp.mail.ru>2016-08-23 15:47:43 +0300
commit2810f6b92636d738b244dbcb681ce647dbafc23f (patch)
tree86ecf02297f4a7028698d2f75ae8fe941e553ac0 /drape
parent135a12cd030a8bf0c62caaae621bc625a8ff1be1 (diff)
Refactored routing rendering
Diffstat (limited to 'drape')
-rw-r--r--drape/drape.pro2
-rw-r--r--drape/shaders/route_arrow_fragment_shader.fsh40
-rw-r--r--drape/shaders/route_arrow_vertex_shader.vsh34
-rw-r--r--drape/shaders/shader_index.txt2
4 files changed, 36 insertions, 42 deletions
diff --git a/drape/drape.pro b/drape/drape.pro
index 9b0f591fa8..323eacc8f2 100644
--- a/drape/drape.pro
+++ b/drape/drape.pro
@@ -33,7 +33,7 @@ OTHER_FILES += \
shaders/my_position_shader.vsh \
shaders/path_symbol_vertex_shader.vsh \
shaders/position_accuracy3d_shader.vsh \
- shaders/route_arrow_fragment_shader.fsh \
+ shaders/route_arrow_vertex_shader.vsh \
shaders/route_dash_fragment_shader.fsh \
shaders/route_fragment_shader.fsh \
shaders/route_vertex_shader.vsh \
diff --git a/drape/shaders/route_arrow_fragment_shader.fsh b/drape/shaders/route_arrow_fragment_shader.fsh
deleted file mode 100644
index ec7a3a5d26..0000000000
--- a/drape/shaders/route_arrow_fragment_shader.fsh
+++ /dev/null
@@ -1,40 +0,0 @@
-varying vec3 v_length;
-
-uniform sampler2D u_colorTex;
-uniform vec4 u_textureRect;
-
-uniform mat4 u_arrowBorders;
-
-vec4 calculateColor(float t, float v, vec4 arrowBorder)
-{
- float u = mix(arrowBorder.y, arrowBorder.w, t / arrowBorder.z);
- vec2 uv = vec2(mix(u_textureRect.x, u_textureRect.z, u), v);
- return texture2D(u_colorTex, uv);
-}
-
-void main(void)
-{
- // DO NOT optimize conditions/add loops! After doing changes in this shader, please, test
- // it on Samsung Galaxy S5 mini because the device has a lot of problems with compiling
- // and executing shaders which work great on other devices.
- float v = mix(u_textureRect.y, u_textureRect.w, clamp(0.5 * v_length.y + 0.5, 0.0, 1.0));
-
- vec4 finalColor = vec4(0, 0, 0, 0);
- float t = v_length.x - u_arrowBorders[0].x;
- if (t >= 0.0 && t <= u_arrowBorders[0].z)
- finalColor = calculateColor(t, v, u_arrowBorders[0]);
-
- t = v_length.x - u_arrowBorders[1].x;
- if (t >= 0.0 && t <= u_arrowBorders[1].z)
- finalColor = calculateColor(t, v, u_arrowBorders[1]);
-
- t = v_length.x - u_arrowBorders[2].x;
- if (t >= 0.0 && t <= u_arrowBorders[2].z)
- finalColor = calculateColor(t, v, u_arrowBorders[2]);
-
- t = v_length.x - u_arrowBorders[3].x;
- if (t >= 0.0 && t <= u_arrowBorders[3].z)
- finalColor = calculateColor(t, v, u_arrowBorders[3]);
-
- gl_FragColor = finalColor;
-}
diff --git a/drape/shaders/route_arrow_vertex_shader.vsh b/drape/shaders/route_arrow_vertex_shader.vsh
new file mode 100644
index 0000000000..df48b4c1be
--- /dev/null
+++ b/drape/shaders/route_arrow_vertex_shader.vsh
@@ -0,0 +1,34 @@
+attribute vec4 a_position;
+attribute vec2 a_normal;
+attribute vec2 a_colorTexCoords;
+
+uniform mat4 modelView;
+uniform mat4 projection;
+uniform mat4 pivotTransform;
+
+uniform float u_arrowHalfWidth;
+
+varying vec2 v_colorTexCoords;
+
+void main(void)
+{
+ float normalLen = length(a_normal);
+ vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * modelView).xy;
+ if (normalLen != 0.0)
+ {
+ vec2 norm = a_normal * u_arrowHalfWidth;
+ float actualHalfWidth = length(norm);
+
+ vec4 glbShiftPos = vec4(a_position.xy + norm, 0.0, 1.0);
+ vec2 shiftPos = (glbShiftPos * modelView).xy;
+ transformedAxisPos = transformedAxisPos + normalize(shiftPos - transformedAxisPos) * actualHalfWidth;
+ }
+
+ v_colorTexCoords = a_colorTexCoords;
+
+ vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * projection;
+ float w = pos.w;
+ pos.xyw = (pivotTransform * vec4(pos.xy, 0.0, w)).xyw;
+ pos.z *= pos.w / w;
+ gl_Position = pos;
+}
diff --git a/drape/shaders/shader_index.txt b/drape/shaders/shader_index.txt
index e269c386fc..2b191117d5 100644
--- a/drape/shaders/shader_index.txt
+++ b/drape/shaders/shader_index.txt
@@ -16,7 +16,7 @@ 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
+ROUTE_ARROW_PROGRAM route_arrow_vertex_shader.vsh texturing_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
TRANSPARENT_LAYER_PROGRAM transparent_layer_vertex_shader.vsh transparent_layer_fragment_shader.fsh