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
path: root/drape
diff options
context:
space:
mode:
authorDaria Volvenkova <d.volvenkova@corp.mail.ru>2016-02-08 15:29:18 +0300
committerSergey Yershov <yershov@corp.mail.ru>2016-03-23 16:20:43 +0300
commit676dc84586d9c4ec6825d6633c621dc801f0b52a (patch)
treef4e1f3768b71d7d6b8be64f5a49eff4809af97f9 /drape
parentf910ac00e7a46ecb242bb0750fa94c1ef43004d4 (diff)
Merge bucket's features info.
Diffstat (limited to 'drape')
-rw-r--r--drape/render_bucket.cpp25
-rw-r--r--drape/render_bucket.hpp13
2 files changed, 22 insertions, 16 deletions
diff --git a/drape/render_bucket.cpp b/drape/render_bucket.cpp
index 1b5576565e..a17905eb69 100644
--- a/drape/render_bucket.cpp
+++ b/drape/render_bucket.cpp
@@ -104,26 +104,29 @@ void RenderBucket::Render(ScreenBase const & screen)
void RenderBucket::StartFeatureRecord(FeatureGeometryId feature, const m2::RectD & limitRect)
{
- m_featureInfo = feature;
- m_featureLimitRect = limitRect;
+ m_featureInfo = make_pair(feature, FeatureGeometryInfo(limitRect));
m_buffer->ResetChangingTracking();
- m_featuresRanges.insert(make_pair(feature, FeatureGeometryInfo(limitRect)));
}
void RenderBucket::EndFeatureRecord(bool featureCompleted)
{
- auto it = m_featuresRanges.find(m_featureInfo);
- ASSERT(it != m_featuresRanges.end(), ());
- it->second.m_featureCompleted = featureCompleted;
- if (!m_buffer->IsChanged())
- m_featuresRanges.erase(it);
- m_featureInfo = FeatureGeometryId();
+ ASSERT(m_featureInfo.first.IsValid(), ());
+ m_featureInfo.second.m_featureCompleted = featureCompleted;
+ if (m_buffer->IsChanged())
+ m_featuresGeometryInfo.insert(m_featureInfo);
+ m_featureInfo = TFeatureInfo();
+}
+
+void RenderBucket::AddFeaturesInfo(RenderBucket const & bucket)
+{
+ for (auto const & info : bucket.m_featuresGeometryInfo)
+ m_featuresGeometryInfo.insert(info);
}
bool RenderBucket::IsFeaturesWaiting(TCheckFeaturesWaiting isFeaturesWaiting)
{
- ASSERT(!m_featuresRanges.empty(), ());
- for (auto const & featureRange : m_featuresRanges)
+ ASSERT(!m_featuresGeometryInfo.empty(), ());
+ for (auto const & featureRange : m_featuresGeometryInfo)
if (isFeaturesWaiting(featureRange.second.m_limitRect))
return true;
return false;
diff --git a/drape/render_bucket.hpp b/drape/render_bucket.hpp
index 7a011a6812..6ac231603e 100644
--- a/drape/render_bucket.hpp
+++ b/drape/render_bucket.hpp
@@ -55,21 +55,24 @@ public:
using TCheckFeaturesWaiting = function<bool(m2::RectD const &)>;
bool IsFeaturesWaiting(TCheckFeaturesWaiting isFeaturesWaiting);
+ void AddFeaturesInfo(RenderBucket const & bucket);
+
private:
struct FeatureGeometryInfo
{
+ FeatureGeometryInfo() = default;
FeatureGeometryInfo(m2::RectD const & limitRect)
: m_limitRect(limitRect)
{}
m2::RectD m_limitRect;
- bool m_featureCompleted = true;
+ bool m_featureCompleted = false;
};
- using TFeaturesRanges = map<FeatureGeometryId, FeatureGeometryInfo>;
+ using TFeaturesGeometryInfo = map<FeatureGeometryId, FeatureGeometryInfo>;
+ using TFeatureInfo = pair<FeatureGeometryId, FeatureGeometryInfo>;
- FeatureGeometryId m_featureInfo;
- m2::RectD m_featureLimitRect;
- TFeaturesRanges m_featuresRanges;
+ TFeatureInfo m_featureInfo;
+ TFeaturesGeometryInfo m_featuresGeometryInfo;
vector<drape_ptr<OverlayHandle> > m_overlay;
drape_ptr<VertexArrayBuffer> m_buffer;