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:
authorr.kuznetsov <r.kuznetsov@corp.mail.ru>2017-02-21 13:05:37 +0300
committerr.kuznetsov <r.kuznetsov@corp.mail.ru>2017-02-21 13:05:37 +0300
commitcfb493bdb1c5445fdf710f51ce4e2a9271fc9499 (patch)
treed07d7d517e7559793537ffae91348918d19a8901
parent90500aa2908eb05dbc1527ec60055b43109ed157 (diff)
Added supported features to Drapedrape-supported-features
-rw-r--r--drape/support_manager.cpp9
-rw-r--r--drape/support_manager.hpp14
-rw-r--r--drape_frontend/drape_engine.cpp3
-rw-r--r--drape_frontend/drape_engine.hpp4
-rwxr-xr-xdrape_frontend/frontend_renderer.cpp20
-rwxr-xr-xdrape_frontend/frontend_renderer.hpp6
-rw-r--r--map/framework.cpp17
-rw-r--r--map/framework.hpp4
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();