Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaria Volvenkova <d.volvenkova@corp.mail.ru>2016-08-30 18:22:49 +0300
committerDaria Volvenkova <d.volvenkova@corp.mail.ru>2016-08-30 18:24:58 +0300
commitaab9c22273315e8dc3fb638ccda604247200383d (patch)
treeb4780651262b54fcb59a4d0bfead22e4f095e09e /drape_frontend
parent530f7c270356993c362e216ae177806fca4d8850 (diff)
Fixed crash in navigation on switch to night style.
Diffstat (limited to 'drape_frontend')
-rw-r--r--drape_frontend/drape_engine.cpp19
-rwxr-xr-xdrape_frontend/frontend_renderer.cpp2
-rw-r--r--drape_frontend/message_subclasses.hpp4
-rw-r--r--drape_frontend/route_renderer.cpp28
-rw-r--r--drape_frontend/route_renderer.hpp4
5 files changed, 20 insertions, 37 deletions
diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp
index e406525800..445d939146 100644
--- a/drape_frontend/drape_engine.cpp
+++ b/drape_frontend/drape_engine.cpp
@@ -102,11 +102,6 @@ void DrapeEngine::Update(int w, int h)
make_unique_dp<RecoverGLResourcesMessage>(),
MessagePriority::High);
- m_threadCommutator->PostMessage(ThreadsCommutator::ResourceUploadThread,
- make_unique_dp<GuiLayerLayoutMessage>(m_widgetsLayout),
- MessagePriority::Normal);
-
-
ResizeImpl(w, h);
}
@@ -204,13 +199,7 @@ void DrapeEngine::UpdateMapStyle()
}
// Recache gui after updating of style.
- {
- RecacheGui(false);
-
- m_threadCommutator->PostMessage(ThreadsCommutator::ResourceUploadThread,
- make_unique_dp<GuiLayerLayoutMessage>(m_widgetsLayout),
- MessagePriority::Normal);
- }
+ RecacheGui(false);
}
void DrapeEngine::RecacheMapShapes()
@@ -408,6 +397,12 @@ void DrapeEngine::SetRoutePoint(m2::PointD const & position, bool isStart, bool
void DrapeEngine::SetWidgetLayout(gui::TWidgetsLayoutInfo && info)
{
m_widgetsLayout = move(info);
+ for (auto const & layout : m_widgetsLayout)
+ {
+ auto const itInfo = m_widgetsInfo.find(layout.first);
+ if (itInfo != m_widgetsInfo.end())
+ itInfo->second.m_pixelPivot = layout.second;
+ }
m_threadCommutator->PostMessage(ThreadsCommutator::ResourceUploadThread,
make_unique_dp<GuiLayerLayoutMessage>(m_widgetsLayout),
MessagePriority::Normal);
diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp
index 269f4cf290..e73e37def3 100755
--- a/drape_frontend/frontend_renderer.cpp
+++ b/drape_frontend/frontend_renderer.cpp
@@ -748,7 +748,7 @@ void FrontendRenderer::UpdateGLResources()
routeData->m_sourceTurns,
routeData->m_color,
routeData->m_pattern);
- m_routeRenderer->Clear(true /* keepDistanceFromBegin */);
+ m_routeRenderer->ClearGLDependentResources();
m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread, move(recacheRouteMsg),
MessagePriority::Normal);
}
diff --git a/drape_frontend/message_subclasses.hpp b/drape_frontend/message_subclasses.hpp
index 5fc9412856..8ffd1ef3b3 100644
--- a/drape_frontend/message_subclasses.hpp
+++ b/drape_frontend/message_subclasses.hpp
@@ -287,6 +287,7 @@ public:
{}
Type GetType() const override { return Message::GuiRecache;}
+ bool IsGLContextDependent() const override { return true; }
gui::TWidgetsInitInfo const & GetInitInfo() const { return m_initInfo; }
bool NeedResetOldGui() const { return m_needResetOldGui; }
@@ -302,6 +303,7 @@ public:
MapShapesRecacheMessage() = default;
Type GetType() const override { return Message::MapShapesRecache; }
+ bool IsGLContextDependent() const override { return true; }
};
class GuiLayerLayoutMessage : public Message
@@ -312,6 +314,7 @@ public:
{}
Type GetType() const override { return GuiLayerLayout; }
+ bool IsGLContextDependent() const override { return true; }
gui::TWidgetsLayoutInfo const & GetLayoutInfo() const { return m_layoutInfo; }
gui::TWidgetsLayoutInfo AcceptLayoutInfo() { return move(m_layoutInfo); }
@@ -735,6 +738,7 @@ public:
RecoverGLResourcesMessage(){}
Type GetType() const override { return Message::RecoverGLResources; }
+ bool IsGLContextDependent() const override { return true; }
};
class DeactivateRouteFollowingMessage : public Message
diff --git a/drape_frontend/route_renderer.cpp b/drape_frontend/route_renderer.cpp
index 3f041b3ce7..f8c8866cd2 100644
--- a/drape_frontend/route_renderer.cpp
+++ b/drape_frontend/route_renderer.cpp
@@ -229,7 +229,7 @@ void RouteRenderer::UpdateRoute(ScreenBase const & screen, TCacheRouteArrowsCall
void RouteRenderer::RenderRoute(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
- if (!m_routeData || m_invalidGLResources)
+ if (!m_routeData || m_routeData->m_route.m_buckets.empty())
return;
// Render route.
@@ -284,9 +284,6 @@ void RouteRenderer::RenderRoute(ScreenBase const & screen, ref_ptr<dp::GpuProgra
void RouteRenderer::RenderRouteSigns(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
- if (m_invalidGLResources)
- return;
-
if (m_startRouteSign)
{
ASSERT(m_startRouteSign->m_isValid, ());
@@ -304,7 +301,7 @@ void RouteRenderer::RenderRouteSign(drape_ptr<RouteSignData> const & sign, Scree
ref_ptr<dp::GpuProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
- if (m_invalidGLResources)
+ if (sign->m_sign.m_buckets.empty())
return;
dp::GLState const & state = sign->m_sign.m_state;
@@ -328,19 +325,14 @@ void RouteRenderer::RenderRouteSign(drape_ptr<RouteSignData> const & sign, Scree
void RouteRenderer::SetRouteData(drape_ptr<RouteData> && routeData, ref_ptr<dp::GpuProgramManager> mng)
{
- m_invalidGLResources = false;
-
m_routeData = move(routeData);
m_arrowBorders.clear();
BuildBuckets(m_routeData->m_route, mng);
- m_distanceFromBegin = 0.0;
}
void RouteRenderer::SetRouteSign(drape_ptr<RouteSignData> && routeSignData, ref_ptr<dp::GpuProgramManager> mng)
{
- m_invalidGLResources = false;
-
if (routeSignData->m_isStart)
{
if (!routeSignData->m_isValid)
@@ -383,34 +375,28 @@ drape_ptr<RouteData> const & RouteRenderer::GetRouteData() const
void RouteRenderer::SetRouteArrows(drape_ptr<RouteArrowsData> && routeArrowsData,
ref_ptr<dp::GpuProgramManager> mng)
{
- m_invalidGLResources = false;
-
m_routeArrows = move(routeArrowsData);
BuildBuckets(m_routeArrows->m_arrows, mng);
}
-void RouteRenderer::Clear(bool keepDistanceFromBegin)
+void RouteRenderer::Clear()
{
m_routeData.reset();
m_startRouteSign.reset();
m_finishRouteSign.reset();
m_arrowBorders.clear();
m_routeArrows.reset();
-
- if (!keepDistanceFromBegin)
- m_distanceFromBegin = 0.0;
+ m_distanceFromBegin = 0.0;
}
void RouteRenderer::ClearGLDependentResources()
{
- m_invalidGLResources = true;
-
if (m_routeData != nullptr)
- m_routeData->m_route.m_buckets.clear();
+ m_routeData->m_route = RouteRenderProperty();
if (m_startRouteSign != nullptr)
- m_startRouteSign->m_sign.m_buckets.clear();
+ m_startRouteSign->m_sign = RouteRenderProperty();
if (m_finishRouteSign != nullptr)
- m_finishRouteSign->m_sign.m_buckets.clear();
+ m_finishRouteSign->m_sign = RouteRenderProperty();
m_routeArrows.reset();
}
diff --git a/drape_frontend/route_renderer.hpp b/drape_frontend/route_renderer.hpp
index f98b9858f5..dc965c7402 100644
--- a/drape_frontend/route_renderer.hpp
+++ b/drape_frontend/route_renderer.hpp
@@ -34,7 +34,7 @@ public:
void SetRouteArrows(drape_ptr<RouteArrowsData> && routeArrowsData, ref_ptr<dp::GpuProgramManager> mng);
- void Clear(bool keepDistanceFromBegin = false);
+ void Clear();
void ClearGLDependentResources();
void UpdateDistanceFromBegin(double distanceFromBegin);
@@ -55,8 +55,6 @@ private:
float m_currentHalfWidth = 0.0f;
float m_currentAlpha = 0.0f;
-
- bool m_invalidGLResources = false;
};
} // namespace df