From 5ff1caa2fa95080789c1ff33e1797cada77c5062 Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Thu, 12 Nov 2015 17:33:35 +0300 Subject: [PATCH] Added rendering invalidation --- drape_frontend/drape_engine.cpp | 7 +++++++ drape_frontend/drape_engine.hpp | 1 + drape_frontend/frontend_renderer.cpp | 6 ++++++ drape_frontend/message.hpp | 3 ++- drape_frontend/message_subclasses.hpp | 8 ++++++++ iphone/Maps/Classes/MapViewController.mm | 2 ++ map/framework.cpp | 6 ++++++ map/framework.hpp | 2 ++ 8 files changed, 34 insertions(+), 1 deletion(-) diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index c6028041b3..b0f518b7b8 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -96,6 +96,13 @@ void DrapeEngine::Resize(int w, int h) ResizeImpl(w, h); } +void DrapeEngine::Invalidate() +{ + m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, + make_unique_dp(), + MessagePriority::High); +} + void DrapeEngine::AddTouchEvent(TouchEvent const & event) { AddUserEvent(event); diff --git a/drape_frontend/drape_engine.hpp b/drape_frontend/drape_engine.hpp index 32710b37d7..028d38497c 100644 --- a/drape_frontend/drape_engine.hpp +++ b/drape_frontend/drape_engine.hpp @@ -62,6 +62,7 @@ public: ~DrapeEngine(); void Resize(int w, int h); + void Invalidate(); void AddTouchEvent(TouchEvent const & event); void Scale(double factor, m2::PointD const & pxPoint, bool isAnim); diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index ce8227435b..d2f814c2cf 100755 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -381,6 +381,12 @@ void FrontendRenderer::AcceptMessage(ref_ptr message) break; } + case Message::Invalidate: + { + // Do nothing here, new frame will be rendered because of this message processing. + break; + } + default: ASSERT(false, ()); } diff --git a/drape_frontend/message.hpp b/drape_frontend/message.hpp index 9eea910f6a..cc60bfaa8c 100644 --- a/drape_frontend/message.hpp +++ b/drape_frontend/message.hpp @@ -38,7 +38,8 @@ public: RemoveRoute, FlushRoute, UpdateMapStyle, - InvalidateTextures + InvalidateTextures, + Invalidate }; virtual ~Message() {} diff --git a/drape_frontend/message_subclasses.hpp b/drape_frontend/message_subclasses.hpp index 5ecb2fe5c1..6b7de8c757 100644 --- a/drape_frontend/message_subclasses.hpp +++ b/drape_frontend/message_subclasses.hpp @@ -588,4 +588,12 @@ public: Type GetType() const override { return Message::InvalidateTextures; } }; +class InvalidateMessage : public Message +{ +public: + InvalidateMessage(){} + + Type GetType() const override { return Message::Invalidate; } +}; + } // namespace df diff --git a/iphone/Maps/Classes/MapViewController.mm b/iphone/Maps/Classes/MapViewController.mm index 46e332888c..70ef5fdf35 100644 --- a/iphone/Maps/Classes/MapViewController.mm +++ b/iphone/Maps/Classes/MapViewController.mm @@ -394,6 +394,8 @@ typedef NS_ENUM(NSUInteger, UserTouchesAction) self.controlsManager.menuState = self.menuRestoreState; [self refreshAd]; + + GetFramework().InvalidateRendering(); } - (void)viewDidLoad diff --git a/map/framework.cpp b/map/framework.cpp index 5cee51e93a..14e235741e 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1625,6 +1625,12 @@ void Framework::ResetLastTapEvent() m_lastTapEvent.reset(); } +void Framework::InvalidateRendering() +{ + if (m_drapeEngine != nullptr) + m_drapeEngine->Invalidate(); +} + UserMark const * Framework::OnTapEventImpl(m2::PointD pxPoint, bool isLong, bool isMyPosition, FeatureID feature) { if (isMyPosition) diff --git a/map/framework.hpp b/map/framework.hpp index 7c069f95aa..147acafae6 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -263,6 +263,8 @@ public: void ResetLastTapEvent(); + void InvalidateRendering(); + private: struct TapEventData {