diff options
author | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2016-02-08 15:29:18 +0300 |
---|---|---|
committer | Sergey Yershov <yershov@corp.mail.ru> | 2016-03-23 16:20:43 +0300 |
commit | 676dc84586d9c4ec6825d6633c621dc801f0b52a (patch) | |
tree | f4e1f3768b71d7d6b8be64f5a49eff4809af97f9 /drape | |
parent | f910ac00e7a46ecb242bb0750fa94c1ef43004d4 (diff) |
Merge bucket's features info.
Diffstat (limited to 'drape')
-rw-r--r-- | drape/render_bucket.cpp | 25 | ||||
-rw-r--r-- | drape/render_bucket.hpp | 13 |
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; |