diff options
author | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2018-07-03 17:59:07 +0300 |
---|---|---|
committer | Roman Kuznetsov <r.kuznetsow@gmail.com> | 2018-07-03 18:27:01 +0300 |
commit | 041cd3e8aef8de0bad9cee6b090072775dbe0656 (patch) | |
tree | 151aadf919c33e344a89087337894ff5ea79565e /drape_frontend | |
parent | 4c7e19e2d57e4d30bb410f5186c276efb4297a33 (diff) |
Fixed calculation of transit scheme state.
Diffstat (limited to 'drape_frontend')
-rw-r--r-- | drape_frontend/backend_renderer.cpp | 1 | ||||
-rw-r--r-- | drape_frontend/drape_engine.cpp | 6 | ||||
-rw-r--r-- | drape_frontend/drape_engine.hpp | 3 | ||||
-rwxr-xr-x | drape_frontend/frontend_renderer.cpp | 8 | ||||
-rwxr-xr-x | drape_frontend/frontend_renderer.hpp | 1 | ||||
-rw-r--r-- | drape_frontend/message_subclasses.hpp | 7 | ||||
-rw-r--r-- | drape_frontend/transit_scheme_builder.cpp | 5 | ||||
-rw-r--r-- | drape_frontend/transit_scheme_builder.hpp | 3 | ||||
-rw-r--r-- | drape_frontend/transit_scheme_renderer.cpp | 16 | ||||
-rw-r--r-- | drape_frontend/transit_scheme_renderer.hpp | 7 |
10 files changed, 25 insertions, 32 deletions
diff --git a/drape_frontend/backend_renderer.cpp b/drape_frontend/backend_renderer.cpp index d0da551c84..f4588b298e 100644 --- a/drape_frontend/backend_renderer.cpp +++ b/drape_frontend/backend_renderer.cpp @@ -436,7 +436,6 @@ void BackendRenderer::AcceptMessage(ref_ptr<Message> message) case Message::UpdateTransitScheme: { ref_ptr<UpdateTransitSchemeMessage> msg = message; - m_transitBuilder->SetVisibleMwms(msg->GetVisibleMwms()); m_transitBuilder->UpdateSchemes(msg->GetTransitDisplayInfos(), m_texMng); break; } diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index 98bc54e27f..ffc50bd433 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -749,12 +749,10 @@ void DrapeEngine::ClearTransitSchemeCache(MwmSet::MwmId const & mwmId) MessagePriority::Normal); } -void DrapeEngine::UpdateTransitScheme(TransitDisplayInfos && transitDisplayInfos, - std::vector<MwmSet::MwmId> const & visibleMwms) +void DrapeEngine::UpdateTransitScheme(TransitDisplayInfos && transitDisplayInfos) { m_threadCommutator->PostMessage(ThreadsCommutator::ResourceUploadThread, - make_unique_dp<UpdateTransitSchemeMessage>(std::move(transitDisplayInfos), - visibleMwms), + make_unique_dp<UpdateTransitSchemeMessage>(std::move(transitDisplayInfos)), MessagePriority::Normal); } diff --git a/drape_frontend/drape_engine.hpp b/drape_frontend/drape_engine.hpp index b2f5c1844f..a3d6277a4d 100644 --- a/drape_frontend/drape_engine.hpp +++ b/drape_frontend/drape_engine.hpp @@ -203,8 +203,7 @@ public: void SetSimplifiedTrafficColors(bool simplified); void EnableTransitScheme(bool enable); - void UpdateTransitScheme(TransitDisplayInfos && transitDisplayInfos, - std::vector<MwmSet::MwmId> const & visibleMwms); + void UpdateTransitScheme(TransitDisplayInfos && transitDisplayInfos); void ClearTransitSchemeCache(MwmSet::MwmId const & mwmId); void SetFontScaleFactor(double scaleFactor); diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index 33b14be677..0c4a7360d1 100755 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -753,6 +753,7 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message) case Message::EnableTransitScheme: { ref_ptr<EnableTransitSchemeMessage > msg = message; + m_transitSchemeEnabled = msg->IsEnabled(); if (!msg->IsEnabled()) m_transitSchemeRenderer->ClearGLDependentResources(make_ref(m_overlayTree)); break; @@ -1360,11 +1361,10 @@ void FrontendRenderer::RenderTransitSchemeLayer(ScreenBase const & modelView) { GLFunctions::glClear(gl_const::GLDepthBit); GLFunctions::glEnable(gl_const::GLDepthTest); - if (m_transitSchemeRenderer->HasRenderData(m_currentZoomLevel)) + if (m_transitSchemeEnabled && m_transitSchemeRenderer->IsSchemeVisible(m_currentZoomLevel)) { RenderTransitBackground(); - GLFunctions::glEnable(gl_const::GLDepthTest); - m_transitSchemeRenderer->RenderTransit(modelView, m_currentZoomLevel, make_ref(m_gpuProgramManager), + m_transitSchemeRenderer->RenderTransit(modelView, make_ref(m_gpuProgramManager), make_ref(m_postprocessRenderer), m_generalUniforms); } GLFunctions::glDisable(gl_const::GLDepthTest); @@ -1463,7 +1463,7 @@ void FrontendRenderer::BuildOverlayTree(ScreenBase const & modelView) for (drape_ptr<RenderGroup> & group : overlay.m_renderGroups) UpdateOverlayTree(modelView, group); } - if (m_transitSchemeRenderer->HasRenderData(m_currentZoomLevel) && !HasTransitRouteData()) + if (m_transitSchemeRenderer->IsSchemeVisible(m_currentZoomLevel) && !HasTransitRouteData()) m_transitSchemeRenderer->CollectOverlays(make_ref(m_overlayTree), modelView); EndUpdateOverlayTree(); } diff --git a/drape_frontend/frontend_renderer.hpp b/drape_frontend/frontend_renderer.hpp index 3a9a998f63..4baba1fdfe 100755 --- a/drape_frontend/frontend_renderer.hpp +++ b/drape_frontend/frontend_renderer.hpp @@ -318,6 +318,7 @@ private: bool m_needRestoreSize; bool m_trafficEnabled; + bool m_transitSchemeEnabled = false; drape_ptr<OverlaysTracker> m_overlaysTracker; OverlaysShowStatsCallback m_overlaysShowStatsCallback; diff --git a/drape_frontend/message_subclasses.hpp b/drape_frontend/message_subclasses.hpp index 6466ff5d3e..3a5fcab0f1 100644 --- a/drape_frontend/message_subclasses.hpp +++ b/drape_frontend/message_subclasses.hpp @@ -1053,19 +1053,16 @@ private: class UpdateTransitSchemeMessage : public Message { public: - UpdateTransitSchemeMessage(TransitDisplayInfos && transitInfos, - std::vector<MwmSet::MwmId> const & visibleMwms) - : m_transitInfos(move(transitInfos)), m_visibleMwms(visibleMwms) + UpdateTransitSchemeMessage(TransitDisplayInfos && transitInfos) + : m_transitInfos(move(transitInfos)) {} Type GetType() const override { return Message::UpdateTransitScheme; } TransitDisplayInfos const & GetTransitDisplayInfos() { return m_transitInfos; } - std::vector<MwmSet::MwmId> const & GetVisibleMwms() const { return m_visibleMwms; } private: TransitDisplayInfos m_transitInfos; - std::vector<MwmSet::MwmId> m_visibleMwms; }; class RegenerateTransitMessage : public Message diff --git a/drape_frontend/transit_scheme_builder.cpp b/drape_frontend/transit_scheme_builder.cpp index e8f7e738ad..9fb1ba73e5 100644 --- a/drape_frontend/transit_scheme_builder.cpp +++ b/drape_frontend/transit_scheme_builder.cpp @@ -274,11 +274,6 @@ bool FindLongerPath(routing::transit::StopId stop1Id, routing::transit::StopId s } } // namespace -void TransitSchemeBuilder::SetVisibleMwms(std::vector<MwmSet::MwmId> const & visibleMwms) -{ - m_visibleMwms = visibleMwms; -} - void TransitSchemeBuilder::UpdateSchemes(TransitDisplayInfos const & transitDisplayInfos, ref_ptr<dp::TextureManager> textures) { diff --git a/drape_frontend/transit_scheme_builder.hpp b/drape_frontend/transit_scheme_builder.hpp index 7c8610942f..e5a85b37de 100644 --- a/drape_frontend/transit_scheme_builder.hpp +++ b/drape_frontend/transit_scheme_builder.hpp @@ -111,8 +111,6 @@ public: : m_flushRenderDataFn(flushFn) {} - void SetVisibleMwms(std::vector<MwmSet::MwmId> const & visibleMwms); - void UpdateSchemes(TransitDisplayInfos const & transitDisplayInfos, ref_ptr<dp::TextureManager> textures); void RebuildSchemes(ref_ptr<dp::TextureManager> textures); @@ -167,7 +165,6 @@ private: using TransitSchemes = std::map<MwmSet::MwmId, MwmSchemeData>; TransitSchemes m_schemes; - std::vector<MwmSet::MwmId> m_visibleMwms; TFlushRenderDataFn m_flushRenderDataFn; diff --git a/drape_frontend/transit_scheme_renderer.cpp b/drape_frontend/transit_scheme_renderer.cpp index 88d598eefa..ae04735e45 100644 --- a/drape_frontend/transit_scheme_renderer.cpp +++ b/drape_frontend/transit_scheme_renderer.cpp @@ -27,9 +27,15 @@ float CalculateHalfWidth(ScreenBase const & screen) } } // namespace -bool TransitSchemeRenderer::HasRenderData(int zoomLevel) const +bool TransitSchemeRenderer::IsSchemeVisible(int zoomLevel) const { - return !m_linesRenderData.empty() && zoomLevel >= kTransitSchemeMinZoomLevel; + return zoomLevel >= kTransitSchemeMinZoomLevel; +} + +bool TransitSchemeRenderer::HasRenderData() const +{ + return !m_linesRenderData.empty() || !m_linesCapsRenderData.empty() || !m_markersRenderData.empty() || + !m_textRenderData.empty() || !m_colorSymbolRenderData.empty(); } void TransitSchemeRenderer::ClearGLDependentResources(ref_ptr<dp::OverlayTree> tree) @@ -123,12 +129,12 @@ void TransitSchemeRenderer::PrepareRenderData(ref_ptr<gpu::ProgramManager> mng, currentRenderData.emplace_back(std::move(newRenderData)); } -void TransitSchemeRenderer::RenderTransit(ScreenBase const & screen, int zoomLevel, - ref_ptr<gpu::ProgramManager> mng, +void TransitSchemeRenderer::RenderTransit(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng, ref_ptr<PostprocessRenderer> postprocessRenderer, dp::UniformValuesStorage const & commonUniforms) { - if (!HasRenderData(zoomLevel)) + auto const zoomLevel = GetDrawTileScale(screen); + if (!IsSchemeVisible(zoomLevel) || !HasRenderData()) return; float const pixelHalfWidth = CalculateHalfWidth(screen); diff --git a/drape_frontend/transit_scheme_renderer.hpp b/drape_frontend/transit_scheme_renderer.hpp index b222841d29..c09b1bff72 100644 --- a/drape_frontend/transit_scheme_renderer.hpp +++ b/drape_frontend/transit_scheme_renderer.hpp @@ -21,10 +21,9 @@ class TransitSchemeRenderer public: void AddRenderData(ref_ptr<gpu::ProgramManager> mng, ref_ptr<dp::OverlayTree> tree, TransitRenderData && renderData); - bool HasRenderData(int zoomLevel) const; + bool IsSchemeVisible(int zoomLevel) const; - void RenderTransit(ScreenBase const & screen, int zoomLevel, - ref_ptr<gpu::ProgramManager> mng, + void RenderTransit(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng, ref_ptr<PostprocessRenderer> postprocessRenderer, dp::UniformValuesStorage const & commonUniforms); @@ -61,6 +60,8 @@ private: void RenderStubs(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng, dp::UniformValuesStorage const & commonUniforms); + bool HasRenderData() const; + uint32_t m_lastRecacheId = 0; std::vector<TransitRenderData> m_linesRenderData; std::vector<TransitRenderData> m_linesCapsRenderData; |