diff options
author | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2017-02-21 13:05:37 +0300 |
---|---|---|
committer | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2017-02-21 13:05:37 +0300 |
commit | cfb493bdb1c5445fdf710f51ce4e2a9271fc9499 (patch) | |
tree | d07d7d517e7559793537ffae91348918d19a8901 | |
parent | 90500aa2908eb05dbc1527ec60055b43109ed157 (diff) |
Added supported features to Drapedrape-supported-features
-rw-r--r-- | drape/support_manager.cpp | 9 | ||||
-rw-r--r-- | drape/support_manager.hpp | 14 | ||||
-rw-r--r-- | drape_frontend/drape_engine.cpp | 3 | ||||
-rw-r--r-- | drape_frontend/drape_engine.hpp | 4 | ||||
-rwxr-xr-x | drape_frontend/frontend_renderer.cpp | 20 | ||||
-rwxr-xr-x | drape_frontend/frontend_renderer.hpp | 6 | ||||
-rw-r--r-- | map/framework.cpp | 17 | ||||
-rw-r--r-- | map/framework.hpp | 4 |
8 files changed, 71 insertions, 6 deletions
diff --git a/drape/support_manager.cpp b/drape/support_manager.cpp index 10a0ecccc8..f235878a72 100644 --- a/drape/support_manager.cpp +++ b/drape/support_manager.cpp @@ -49,6 +49,10 @@ void SupportManager::Init() m_maxLineWidth = max(1, GLFunctions::glGetMaxLineWidth()); LOG(LINFO, ("Max line width =", m_maxLineWidth)); + + // Fill supported features. + m_features.m_buildings3D = 1; + m_features.m_perspectiveMode = 1; } bool SupportManager::IsSamsungGoogleNexus() const @@ -71,6 +75,11 @@ int SupportManager::GetMaxLineWidth() const return m_maxLineWidth; } +SupportedFeatures const & SupportManager::GetFeatures() const +{ + return m_features; +} + SupportManager & SupportManager::Instance() { static SupportManager manager; diff --git a/drape/support_manager.hpp b/drape/support_manager.hpp index c59fdbcbbe..ad49d26d3b 100644 --- a/drape/support_manager.hpp +++ b/drape/support_manager.hpp @@ -2,9 +2,19 @@ #include "std/noncopyable.hpp" +#include <functional> + namespace dp { +struct SupportedFeatures +{ + unsigned int m_buildings3D : 1; + unsigned int m_perspectiveMode : 1; +}; + +using OnGetSupportedFeatures = std::function<void(SupportedFeatures const & features)>; + class SupportManager : public noncopyable { public: @@ -20,6 +30,8 @@ public: int GetMaxLineWidth() const; + SupportedFeatures const & GetFeatures() const; + private: SupportManager() = default; ~SupportManager() = default; @@ -29,6 +41,8 @@ private: bool m_isTegra = false; int m_maxLineWidth = 1; + + SupportedFeatures m_features; }; } // namespace dp diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index d39a1c0851..8d5ecb01d4 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -51,7 +51,8 @@ DrapeEngine::DrapeEngine(Params && params) timeInBackground = my::Timer::LocalTime() - lastEnterBackground; FrontendRenderer::Params frParams(make_ref(m_threadCommutator), params.m_factory, - make_ref(m_textureManager), m_viewport, + make_ref(m_textureManager), + move(params.m_onGetSupportedFeatures), m_viewport, bind(&DrapeEngine::ModelViewChanged, this, _1), bind(&DrapeEngine::TapEvent, this, _1), bind(&DrapeEngine::UserPositionChanged, this, _1), diff --git a/drape_frontend/drape_engine.hpp b/drape_frontend/drape_engine.hpp index 6d70cedd31..4b46b77e7b 100644 --- a/drape_frontend/drape_engine.hpp +++ b/drape_frontend/drape_engine.hpp @@ -9,6 +9,7 @@ #include "drape_frontend/threads_commutator.hpp" #include "drape/pointers.hpp" +#include "drape/support_manager.hpp" #include "drape/texture_manager.hpp" #include "traffic/traffic_info.hpp" @@ -42,6 +43,7 @@ public: ref_ptr<StringsBundle> stringBundle, Viewport const & viewport, MapDataProvider const & model, + dp::OnGetSupportedFeatures && onGetSupportedFeatures, double vs, double fontsScaleFactor, gui::TWidgetsInitInfo && info, @@ -60,6 +62,7 @@ public: , m_stringsBundle(stringBundle) , m_viewport(viewport) , m_model(model) + , m_onGetSupportedFeatures(move(onGetSupportedFeatures)) , m_vs(vs) , m_fontsScaleFactor(fontsScaleFactor) , m_info(move(info)) @@ -80,6 +83,7 @@ public: ref_ptr<StringsBundle> m_stringsBundle; Viewport m_viewport; MapDataProvider m_model; + dp::OnGetSupportedFeatures m_onGetSupportedFeatures; double m_vs; double m_fontsScaleFactor; gui::TWidgetsInitInfo m_info; diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index e1b6327c30..3ebfd52c07 100755 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -138,6 +138,7 @@ FrontendRenderer::FrontendRenderer(Params const & params) , m_needRestoreSize(false) , m_needRegenerateTraffic(false) , m_trafficEnabled(params.m_trafficEnabled) + , m_onGetSupportedFeatures(move(params.m_onGetSupportedFeatures)) #ifdef SCENARIO_ENABLE , m_scenarioManager(new ScenarioManager(this)) #endif @@ -601,7 +602,8 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message) case Message::EnablePerspective: { - AddUserEvent(make_unique_dp<SetAutoPerspectiveEvent>(true /* isAutoPerspective */)); + if (dp::SupportManager::Instance().GetFeatures().m_perspectiveMode) + AddUserEvent(make_unique_dp<SetAutoPerspectiveEvent>(true /* isAutoPerspective */)); break; } @@ -611,21 +613,24 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message) ScreenBase const & screen = m_userEventStream.GetCurrentScreen(); #ifdef OMIM_OS_DESKTOP - if (m_enablePerspectiveInNavigation == msg->AllowPerspective() && + if (dp::SupportManager::Instance().GetFeatures().m_perspectiveMode && + m_enablePerspectiveInNavigation == msg->AllowPerspective() && m_enablePerspectiveInNavigation != screen.isPerspective()) { AddUserEvent(make_unique_dp<SetAutoPerspectiveEvent>(m_enablePerspectiveInNavigation)); } #endif - if (m_enable3dBuildings != msg->Allow3dBuildings()) + if (dp::SupportManager::Instance().GetFeatures().m_buildings3D && + m_enable3dBuildings != msg->Allow3dBuildings()) { m_enable3dBuildings = msg->Allow3dBuildings(); CheckIsometryMinScale(screen); InvalidateRect(screen.ClipRect()); } - if (m_enablePerspectiveInNavigation != msg->AllowPerspective()) + if (dp::SupportManager::Instance().GetFeatures().m_perspectiveMode && + m_enablePerspectiveInNavigation != msg->AllowPerspective()) { m_enablePerspectiveInNavigation = msg->AllowPerspective(); m_myPositionController->EnablePerspectiveInRouting(m_enablePerspectiveInNavigation); @@ -1664,6 +1669,13 @@ void FrontendRenderer::OnContextCreate() GLFunctions::glEnable(gl_const::GLScissorTest); dp::SupportManager::Instance().Init(); + dp::SupportedFeatures const & features = dp::SupportManager::Instance().GetFeatures(); + if (m_onGetSupportedFeatures != nullptr) + m_onGetSupportedFeatures(features); + if (!features.m_buildings3D) + m_enable3dBuildings = false; + if (!features.m_perspectiveMode) + m_enablePerspectiveInNavigation = false; m_gpuProgramManager = make_unique_dp<dp::GpuProgramManager>(); m_gpuProgramManager->Init(); diff --git a/drape_frontend/frontend_renderer.hpp b/drape_frontend/frontend_renderer.hpp index e06ee32451..4e289e6707 100755 --- a/drape_frontend/frontend_renderer.hpp +++ b/drape_frontend/frontend_renderer.hpp @@ -23,6 +23,7 @@ #include "drape/vertex_array_buffer.hpp" #include "drape/gpu_program_manager.hpp" #include "drape/overlay_tree.hpp" +#include "drape/support_manager.hpp" #include "drape/uniform_values_storage.hpp" #include "platform/location.hpp" @@ -72,6 +73,7 @@ public: Params(ref_ptr<ThreadsCommutator> commutator, ref_ptr<dp::OGLContextFactory> factory, ref_ptr<dp::TextureManager> texMng, + dp::OnGetSupportedFeatures onGetSupportedFeatures, Viewport viewport, TModelViewChanged const & modelViewChangedFn, TTapEventInfoFn const & tapEventFn, @@ -87,6 +89,7 @@ public: bool isRoutingActive, bool isAutozoomEnabled) : BaseRenderer::Params(commutator, factory, texMng) + , m_onGetSupportedFeatures(move(onGetSupportedFeatures)) , m_viewport(viewport) , m_modelViewChangedFn(modelViewChangedFn) , m_tapEventFn(tapEventFn) @@ -103,6 +106,7 @@ public: , m_isAutozoomEnabled(isAutozoomEnabled) {} + dp::OnGetSupportedFeatures m_onGetSupportedFeatures; Viewport m_viewport; TModelViewChanged m_modelViewChangedFn; TTapEventInfoFn m_tapEventFn; @@ -330,6 +334,8 @@ private: bool m_needRegenerateTraffic; bool m_trafficEnabled; + dp::OnGetSupportedFeatures m_onGetSupportedFeatures; + drape_ptr<ScenarioManager> m_scenarioManager; #ifdef DEBUG diff --git a/map/framework.cpp b/map/framework.cpp index 09663c52b2..2f3c3f6b16 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1667,6 +1667,15 @@ void Framework::CreateDrapeEngine(ref_ptr<dp::OGLContextFactory> contextFactory, }); }; + auto onGetSupportedFeatures = [this](dp::SupportedFeatures const & features) + { + GetPlatform().RunOnGuiThread([this, features]() + { + m_supportedDrapeFeatures = make_unique<dp::SupportedFeatures>(); + *m_supportedDrapeFeatures = features; + }); + }; + auto isCountryLoadedByNameFn = bind(&Framework::IsCountryLoadedByName, this, _1); auto updateCurrentCountryFn = bind(&Framework::OnUpdateCurrentCountry, this, _1, _2); @@ -1686,7 +1695,8 @@ void Framework::CreateDrapeEngine(ref_ptr<dp::OGLContextFactory> contextFactory, make_ref(&m_stringsBundle), df::Viewport(0, 0, params.m_surfaceWidth, params.m_surfaceHeight), df::MapDataProvider(idReadFn, featureReadFn, isCountryLoadedByNameFn, updateCurrentCountryFn), - params.m_visualScale, fontsScaleFactor, move(params.m_widgetsInitInfo), + move(onGetSupportedFeatures), params.m_visualScale, fontsScaleFactor, + move(params.m_widgetsInitInfo), make_pair(params.m_initialMyPositionState, params.m_hasMyPositionState), move(myPositionModeChangedFn), allow3dBuildings, trafficEnabled, params.m_isChoosePositionMode, params.m_isChoosePositionMode, GetSelectedFeatureTriangles(), params.m_isFirstLaunch, @@ -1790,6 +1800,11 @@ void Framework::SetRenderingDisabled(bool destroyContext) m_drapeEngine->SetRenderingDisabled(destroyContext); } +std::unique_ptr<dp::SupportedFeatures> const & Framework::GetSupportedDrapeFeatures() const +{ + return m_supportedDrapeFeatures; +} + void Framework::ConnectToGpsTracker() { m_connectToGpsTrack = true; diff --git a/map/framework.hpp b/map/framework.hpp index 41b8f04fc7..92a6081d60 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -450,12 +450,16 @@ public: void OnRecoverGLContext(int width, int height); void OnDestroyGLContext(); + std::unique_ptr<dp::SupportedFeatures> const & GetSupportedDrapeFeatures() const; + private: /// Depends on initialized Drape engine. void SaveViewport(); /// Depends on initialized Drape engine. void LoadViewport(); + std::unique_ptr<dp::SupportedFeatures> m_supportedDrapeFeatures; + public: void ConnectToGpsTracker(); void DisconnectFromGpsTracker(); |