diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index 5a0dab7b7c..699c77c040 100755 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -132,9 +132,12 @@ void FrontendRenderer::AcceptMessage(ref_ptr message) drape_ptr bucket = msg->AcceptBuffer(); ref_ptr program = m_gpuProgramManager->GetProgram(state.GetProgramIndex()); ref_ptr program3d = m_gpuProgramManager->GetProgram(state.GetProgram3dIndex()); - program->Bind(); - bucket->GetBuffer()->Build(m_userEventStream.GetCurrentScreen().isPerspective() ? program3d - : program); + bool const isPerspective = m_userEventStream.GetCurrentScreen().isPerspective(); + if (isPerspective) + program3d->Bind(); + else + program->Bind(); + bucket->GetBuffer()->Build(isPerspective ? program3d : program); if (!IsUserMarkLayer(key)) { if (CheckTileGenerations(key)) diff --git a/drape_frontend/route_renderer.cpp b/drape_frontend/route_renderer.cpp index 863574e6f1..883f5d20c7 100644 --- a/drape_frontend/route_renderer.cpp +++ b/drape_frontend/route_renderer.cpp @@ -241,13 +241,18 @@ void RouteRenderer::RenderRouteSign(drape_ptr const & sign, Scree dp::UniformValuesStorage uniforms = commonUniforms; uniforms.SetFloatValue("u_opacity", 1.0f); - ref_ptr program = mng->GetProgram(state.GetProgramIndex()); + ref_ptr program = screen.isPerspective() ? mng->GetProgram(state.GetProgram3dIndex()) + : mng->GetProgram(state.GetProgramIndex()); program->Bind(); + dp::ApplyState(sign->m_sign.m_state, program); dp::ApplyUniforms(uniforms, program); for (auto const & bucket : sign->m_sign.m_buckets) + { + bucket->GetBuffer()->Build(program); bucket->Render(screen); + } } void RouteRenderer::RenderArrow(ref_ptr prg, drape_ptr const & property, diff --git a/drape_frontend/route_shape.cpp b/drape_frontend/route_shape.cpp index fa6659a4c1..6a9ea7a565 100644 --- a/drape_frontend/route_shape.cpp +++ b/drape_frontend/route_shape.cpp @@ -299,6 +299,8 @@ void RouteShape::CacheRouteSign(ref_ptr mng, RouteSignData & }; dp::GLState state(gpu::TEXTURING_PROGRAM, dp::GLState::OverlayLayer); + if (!routeSignData.m_isStart) + state.SetProgram3dIndex(gpu::TEXTURING_BILLBOARD_PROGRAM); state.SetColorTexture(symbol.GetTexture()); { diff --git a/indexer/scales.hpp b/indexer/scales.hpp index 6844c2aaaf..4a48cf7f98 100644 --- a/indexer/scales.hpp +++ b/indexer/scales.hpp @@ -23,7 +23,7 @@ namespace scales /// Default navigation 3d mode scale inline int GetNavigation3dScale() { return UPPER_STYLE_SCALE - 2; } /// Default pedestrian navigation 3d mode scale - inline int GetPedestrianNavigation3dScale() { return UPPER_STYLE_SCALE; } + inline int GetPedestrianNavigation3dScale() { return UPPER_STYLE_SCALE - 1; } /// Minimal allowable scale in 3d mode inline int GetMinAllowableIn3dScale() { return 17; }