diff options
author | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2016-08-12 13:01:35 +0300 |
---|---|---|
committer | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2016-08-23 15:47:43 +0300 |
commit | 2810f6b92636d738b244dbcb681ce647dbafc23f (patch) | |
tree | 86ecf02297f4a7028698d2f75ae8fe941e553ac0 /drape | |
parent | 135a12cd030a8bf0c62caaae621bc625a8ff1be1 (diff) |
Refactored routing rendering
Diffstat (limited to 'drape')
-rw-r--r-- | drape/drape.pro | 2 | ||||
-rw-r--r-- | drape/shaders/route_arrow_fragment_shader.fsh | 40 | ||||
-rw-r--r-- | drape/shaders/route_arrow_vertex_shader.vsh | 34 | ||||
-rw-r--r-- | drape/shaders/shader_index.txt | 2 |
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 |