From 318509ff4f913375df5557bf928fade584bdd37d Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Wed, 30 Nov 2016 10:49:24 +0300 Subject: [PATCH] Tuned night style for traffic rendering --- drape/shaders/traffic_fragment_shader.fsh | 13 ++++---- drape_frontend/backend_renderer.cpp | 1 + drape_frontend/color_constants.cpp | 36 +++++++++++++---------- drape_frontend/color_constants.hpp | 3 ++ drape_frontend/traffic_generator.cpp | 7 ++++- drape_frontend/traffic_generator.hpp | 1 + drape_frontend/traffic_renderer.cpp | 11 +++++++ 7 files changed, 50 insertions(+), 22 deletions(-) diff --git a/drape/shaders/traffic_fragment_shader.fsh b/drape/shaders/traffic_fragment_shader.fsh index 2a190d10c3..26955308fd 100644 --- a/drape/shaders/traffic_fragment_shader.fsh +++ b/drape/shaders/traffic_fragment_shader.fsh @@ -7,25 +7,26 @@ uniform sampler2D u_maskTex; uniform float u_opacity; uniform float u_outline; +uniform vec3 u_lightArrowColor; +uniform vec3 u_darkArrowColor; +uniform vec3 u_outlineColor; + const float kAntialiasingThreshold = 0.92; const float kOutlineThreshold1 = 0.8; const float kOutlineThreshold2 = 0.5; -const vec3 kLightArrow = vec3(1.0, 1.0, 1.0); -const vec3 kDarkArrow = vec3(107.0 / 255.0, 81.0 / 255.0, 20.0 / 255.0); - void main(void) { vec4 color = texture2D(u_colorTex, v_colorTexCoord); float alphaCode = color.a; vec4 mask = texture2D(u_maskTex, v_maskTexCoord); color.a = u_opacity * (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_halfLength))); - color.rgb = mix(color.rgb, mask.rgb * mix(kLightArrow, kDarkArrow, step(alphaCode, 0.6)), mask.a); + color.rgb = mix(color.rgb, mask.rgb * mix(u_lightArrowColor, u_darkArrowColor, step(alphaCode, 0.6)), mask.a); if (u_outline > 0.0) { - color.rgb = mix(color.rgb, vec3(1.0, 1.0, 1.0), step(kOutlineThreshold1, abs(v_halfLength))); - color.rgb = mix(color.rgb, vec3(1.0, 1.0, 1.0), smoothstep(kOutlineThreshold2, kOutlineThreshold1, abs(v_halfLength))); + color.rgb = mix(color.rgb, u_outlineColor, step(kOutlineThreshold1, abs(v_halfLength))); + color.rgb = mix(color.rgb, u_outlineColor, smoothstep(kOutlineThreshold2, kOutlineThreshold1, abs(v_halfLength))); } gl_FragColor = color; } diff --git a/drape_frontend/backend_renderer.cpp b/drape_frontend/backend_renderer.cpp index 546a734edc..b535393edd 100644 --- a/drape_frontend/backend_renderer.cpp +++ b/drape_frontend/backend_renderer.cpp @@ -293,6 +293,7 @@ void BackendRenderer::AcceptMessage(ref_ptr message) { m_texMng->Invalidate(VisualParams::Instance().GetResourcePostfix()); RecacheMapShapes(); + m_trafficGenerator->InvalidateTexturesCache(); break; } diff --git a/drape_frontend/color_constants.cpp b/drape_frontend/color_constants.cpp index b940c297ca..c2a0ee7e9a 100644 --- a/drape_frontend/color_constants.cpp +++ b/drape_frontend/color_constants.cpp @@ -25,13 +25,16 @@ unordered_map> kColorConstants = { TrackPlaneSpeed, dp::Color(10, 196, 255, 255) }, { TrackUnknownDistance, dp::Color(97, 97, 97, 255) }, { TrafficG0, dp::Color(180, 25, 25, 255) }, - { TrafficG1, dp::Color(230, 60, 55, 255) }, - { TrafficG2, dp::Color(230, 60, 55, 255) }, - { TrafficG3, dp::Color(250, 190, 45, 127) }, - { TrafficG4, dp::Color(250, 190, 45, 127) }, + { TrafficG1, dp::Color(250, 190, 45, 127) }, + { TrafficG2, dp::Color(250, 190, 45, 127) }, + { TrafficG3, dp::Color(230, 60, 55, 255) }, + { TrafficG4, dp::Color(230, 60, 55, 255) }, { TrafficG5, dp::Color(55, 165, 55, 255) }, - { TrafficTempBlock, dp::Color(0, 0, 0, 255) }, + { TrafficTempBlock, dp::Color(75, 75, 75, 255) }, { TrafficUnknown, dp::Color(0, 0, 0, 0) }, + { TrafficArrowLight, dp::Color(255, 255, 255, 255) }, + { TrafficArrowDark, dp::Color(107, 81, 20, 255) }, + { TrafficOutline, dp::Color(255, 255, 255, 255) }, } }, { MapStyleDark, @@ -39,23 +42,26 @@ unordered_map> kColorConstants = { GuiText, dp::Color(255, 255, 255, 178) }, { MyPositionAccuracy, dp::Color(255, 255, 255, 15) }, { Selection, dp::Color(255, 230, 140, 164) }, - { Route, dp::Color(255, 202, 40, 180) }, - { RoutePedestrian, dp::Color(255, 152, 0, 180) }, - { RouteBicycle, dp::Color(216, 27, 96, 180) }, + { Route, dp::Color(255, 225, 120, 180) }, + { RoutePedestrian, dp::Color(255, 185, 75, 180) }, + { RouteBicycle, dp::Color(255, 75, 140, 180) }, { Arrow3D, dp::Color(255, 220, 120, 255) }, { Arrow3DObsolete, dp::Color(215, 200, 160, 183) }, { TrackHumanSpeed, dp::Color(255, 152, 0, 255) }, { TrackCarSpeed, dp::Color(255, 202, 40, 255) }, { TrackPlaneSpeed, dp::Color(255, 245, 160, 255) }, { TrackUnknownDistance, dp::Color(150, 150, 150, 255) }, - { TrafficG0, dp::Color(180, 25, 25, 255) }, - { TrafficG1, dp::Color(230, 60, 55, 255) }, - { TrafficG2, dp::Color(230, 60, 55, 255) }, - { TrafficG3, dp::Color(250, 190, 45, 127) }, - { TrafficG4, dp::Color(250, 190, 45, 127) }, - { TrafficG5, dp::Color(55, 165, 55, 255) }, - { TrafficTempBlock, dp::Color(0, 0, 0, 255) }, + { TrafficG0, dp::Color(25, 75, 25, 255) }, + { TrafficG1, dp::Color(115, 80, 0, 127) }, + { TrafficG2, dp::Color(115, 80, 0, 127) }, + { TrafficG3, dp::Color(105, 20, 0, 255) }, + { TrafficG4, dp::Color(105, 20, 0, 255) }, + { TrafficG5, dp::Color(70, 15, 0, 255) }, + { TrafficTempBlock, dp::Color(40, 40, 40, 255) }, { TrafficUnknown, dp::Color(0, 0, 0, 0) }, + { TrafficArrowLight, dp::Color(170, 170, 170, 255) }, + { TrafficArrowDark, dp::Color(30, 30, 30, 255) }, + { TrafficOutline, dp::Color(0, 0, 0, 255) }, } }, }; diff --git a/drape_frontend/color_constants.hpp b/drape_frontend/color_constants.hpp index c982fb72e3..b0faf94661 100644 --- a/drape_frontend/color_constants.hpp +++ b/drape_frontend/color_constants.hpp @@ -29,6 +29,9 @@ enum ColorConstant TrafficG5, TrafficTempBlock, TrafficUnknown, + TrafficArrowLight, + TrafficArrowDark, + TrafficOutline }; dp::Color GetColorConstant(MapStyle style, ColorConstant constant); diff --git a/drape_frontend/traffic_generator.cpp b/drape_frontend/traffic_generator.cpp index 8e625395f0..63e10daabb 100644 --- a/drape_frontend/traffic_generator.cpp +++ b/drape_frontend/traffic_generator.cpp @@ -323,7 +323,7 @@ bool TrafficGenerator::UpdateColoring(TrafficSegmentsColoring const & coloring) void TrafficGenerator::ClearCache() { - m_colorsCacheValid = false; + InvalidateTexturesCache(); m_coloring.clear(); } @@ -332,6 +332,11 @@ void TrafficGenerator::ClearCache(MwmSet::MwmId const & mwmId) m_coloring.erase(mwmId); } +void TrafficGenerator::InvalidateTexturesCache() +{ + m_colorsCacheValid = false; +} + void TrafficGenerator::FlushGeometry(TrafficBatcherKey const & key, dp::GLState const & state, drape_ptr && buffer) { diff --git a/drape_frontend/traffic_generator.hpp b/drape_frontend/traffic_generator.hpp index 69ee1fb8ff..f8a4ccd5d4 100644 --- a/drape_frontend/traffic_generator.hpp +++ b/drape_frontend/traffic_generator.hpp @@ -179,6 +179,7 @@ public: void ClearCache(); void ClearCache(MwmSet::MwmId const & mwmId); + void InvalidateTexturesCache(); bool IsColorsCacheRefreshed() const { return m_colorsCacheRefreshed; } TrafficTexCoords ProcessCacheRefreshing(); diff --git a/drape_frontend/traffic_renderer.cpp b/drape_frontend/traffic_renderer.cpp index efb6f0887e..eeab9b6698 100644 --- a/drape_frontend/traffic_renderer.cpp +++ b/drape_frontend/traffic_renderer.cpp @@ -169,6 +169,11 @@ void TrafficRenderer::RenderTraffic(ScreenBase const & screen, int zoomLevel, m2::RectD const clipRect = screen.ClipRect(); + auto const style = GetStyleReader().GetCurrentStyle(); + dp::Color const lightArrowColor = df::GetColorConstant(style, df::TrafficArrowLight); + dp::Color const darkArrowColor = df::GetColorConstant(style, df::TrafficArrowDark); + dp::Color const outlineColor = df::GetColorConstant(style, df::TrafficOutline); + GLFunctions::glClearDepth(); for (TrafficRenderData & renderData : m_renderData) { @@ -238,6 +243,12 @@ void TrafficRenderer::RenderTraffic(ScreenBase const & screen, int zoomLevel, uniforms.SetMatrix4x4Value("modelView", mv.m_data); uniforms.SetFloatValue("u_opacity", 1.0f); uniforms.SetFloatValue("u_outline", outline); + uniforms.SetFloatValue("u_lightArrowColor", lightArrowColor.GetRedF(), + lightArrowColor.GetGreenF(), lightArrowColor.GetBlueF()); + uniforms.SetFloatValue("u_darkArrowColor", darkArrowColor.GetRedF(), + darkArrowColor.GetGreenF(), darkArrowColor.GetBlueF()); + uniforms.SetFloatValue("u_outlineColor", outlineColor.GetRedF(), + outlineColor.GetGreenF(), outlineColor.GetBlueF()); uniforms.SetFloatValue("u_trafficParams", leftPixelHalfWidth, rightPixelHalfWidth, invLeftPixelLength, zoomLevel >= minVisibleArrowZoomLevel ? 1.0f : 0.0f); dp::ApplyUniforms(uniforms, program);