diff options
author | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2016-03-01 17:57:08 +0300 |
---|---|---|
committer | Sergey Yershov <yershov@corp.mail.ru> | 2016-03-23 16:52:55 +0300 |
commit | 3581b92f8c732cccdfeb7c20da2a31d7e0a13189 (patch) | |
tree | e5a7fa5d804c79b3b52f7051e55655bf88f12e10 /drape | |
parent | 72dbdb6a1834ec618b3529a99b2130e358f83910 (diff) |
Memory feature index removed.
Diffstat (limited to 'drape')
-rw-r--r-- | drape/batcher.cpp | 40 | ||||
-rw-r--r-- | drape/batcher.hpp | 23 | ||||
-rw-r--r-- | drape/render_bucket.cpp | 30 | ||||
-rw-r--r-- | drape/render_bucket.hpp | 24 |
4 files changed, 6 insertions, 111 deletions
diff --git a/drape/batcher.cpp b/drape/batcher.cpp index 99b8803a44..0153267db0 100644 --- a/drape/batcher.cpp +++ b/drape/batcher.cpp @@ -179,29 +179,6 @@ void Batcher::SetFeatureMinZoom(int minZoom) bucket.second->SetFeatureMinZoom(m_featureMinZoom); } -void Batcher::StartFeatureRecord(FeatureGeometryId feature, m2::RectD const & limitRect) -{ - m_currentFeature = feature; - m_featureLimitRect = limitRect; - - if (!m_currentFeature.IsValid()) - return; - - for (auto const & bucket : m_buckets) - bucket.second->StartFeatureRecord(feature, limitRect); -} - -void Batcher::EndFeatureRecord() -{ - if (!m_currentFeature.IsValid()) - return; - - m_currentFeature = FeatureGeometryId(); - - for (auto const & bucket : m_buckets) - bucket.second->EndFeatureRecord(true); -} - void Batcher::ChangeBuffer(ref_ptr<CallbacksWrapper> wrapper) { GLState const & state = wrapper->GetState(); @@ -213,31 +190,26 @@ void Batcher::ChangeBuffer(ref_ptr<CallbacksWrapper> wrapper) ref_ptr<RenderBucket> Batcher::GetBucket(GLState const & state) { - TBuckets::iterator it = m_buckets.find(BucketId(state, m_currentFeature.IsValid())); + TBuckets::iterator it = m_buckets.find(state); if (it != m_buckets.end()) return make_ref(it->second); drape_ptr<VertexArrayBuffer> vao = make_unique_dp<VertexArrayBuffer>(m_indexBufferSize, m_vertexBufferSize); drape_ptr<RenderBucket> buffer = make_unique_dp<RenderBucket>(move(vao)); ref_ptr<RenderBucket> result = make_ref(buffer); - if (m_currentFeature.IsValid()) - result->StartFeatureRecord(m_currentFeature, m_featureLimitRect); result->SetFeatureMinZoom(m_featureMinZoom); - m_buckets.emplace(BucketId(state, m_currentFeature.IsValid()), move(buffer)); + m_buckets.emplace(state, move(buffer)); return result; } void Batcher::FinalizeBucket(GLState const & state) { - BucketId bucketId(state, m_currentFeature.IsValid()); - TBuckets::iterator it = m_buckets.find(bucketId); + TBuckets::iterator it = m_buckets.find(state); ASSERT(it != m_buckets.end(), ("Have no bucket for finalize with given state")); drape_ptr<RenderBucket> bucket = move(it->second); - m_buckets.erase(bucketId); - if (m_currentFeature.IsValid()) - bucket->EndFeatureRecord(false); + m_buckets.erase(state); bucket->GetBuffer()->Preflush(); m_flushInterface(state, move(bucket)); @@ -249,10 +221,8 @@ void Batcher::Flush() for_each(m_buckets.begin(), m_buckets.end(), [this](TBuckets::value_type & bucket) { ASSERT(bucket.second != nullptr, ()); - if (m_currentFeature.IsValid()) - bucket.second->EndFeatureRecord(true); bucket.second->GetBuffer()->Preflush(); - m_flushInterface(bucket.first.m_state, move(bucket.second)); + m_flushInterface(bucket.first, move(bucket.second)); }); m_buckets.clear(); diff --git a/drape/batcher.hpp b/drape/batcher.hpp index d8cc20d346..69466d7670 100644 --- a/drape/batcher.hpp +++ b/drape/batcher.hpp @@ -71,33 +71,12 @@ private: TFlushFn m_flushInterface; private: - struct BucketId - { - BucketId() = default; - BucketId(GLState const & state, bool sharedFeatures) - : m_state(state) - , m_sharedFeatures(sharedFeatures) - {} - - bool operator < (BucketId const & other) const - { - if (m_state != other.m_state) - return m_state < other.m_state; - return m_sharedFeatures < other.m_sharedFeatures; - } - - GLState m_state; - bool m_sharedFeatures = false; - }; - - using TBuckets = map<BucketId, drape_ptr<RenderBucket>>; + using TBuckets = map<GLState, drape_ptr<RenderBucket>>; TBuckets m_buckets; uint32_t m_indexBufferSize; uint32_t m_vertexBufferSize; - FeatureGeometryId m_currentFeature; - m2::RectD m_featureLimitRect; int m_featureMinZoom = 0; }; diff --git a/drape/render_bucket.cpp b/drape/render_bucket.cpp index c18bcd997c..8210088d04 100644 --- a/drape/render_bucket.cpp +++ b/drape/render_bucket.cpp @@ -114,36 +114,6 @@ void RenderBucket::SetFeatureMinZoom(int minZoom) m_featuresMinZoom = minZoom; } -void RenderBucket::StartFeatureRecord(FeatureGeometryId feature, const m2::RectD & limitRect) -{ - m_featureInfo = make_pair(feature, FeatureGeometryInfo(limitRect)); - m_buffer->ResetChangingTracking(); -} - -void RenderBucket::EndFeatureRecord(bool featureCompleted) -{ - 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(IsShared(), ()); - for (auto const & featureRange : m_featuresGeometryInfo) - if (isFeaturesWaiting(featureRange.second.m_limitRect)) - return true; - return false; -} - void RenderBucket::RenderDebug(ScreenBase const & screen) const { #ifdef RENDER_DEBUG_RECTS diff --git a/drape/render_bucket.hpp b/drape/render_bucket.hpp index 809a9b7fba..d4688b4937 100644 --- a/drape/render_bucket.hpp +++ b/drape/render_bucket.hpp @@ -51,35 +51,11 @@ public: todo(make_ref(h)); } - bool IsShared() const { return !m_featuresGeometryInfo.empty(); } - void StartFeatureRecord(FeatureGeometryId feature, m2::RectD const & limitRect); - void EndFeatureRecord(bool featureCompleted); - void SetFeatureMinZoom(int minZoom); int GetMinZoom() const { return m_featuresMinZoom; } - 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 = false; - }; - using TFeaturesGeometryInfo = map<FeatureGeometryId, FeatureGeometryInfo>; - using TFeatureInfo = pair<FeatureGeometryId, FeatureGeometryInfo>; - int m_featuresMinZoom = numeric_limits<int>::max(); - TFeatureInfo m_featureInfo; - TFeaturesGeometryInfo m_featuresGeometryInfo; vector<drape_ptr<OverlayHandle> > m_overlay; drape_ptr<VertexArrayBuffer> m_buffer; |