diff options
author | ExMix <rahuba.youri@mapswithme.com> | 2014-02-04 19:36:20 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 02:11:08 +0300 |
commit | 935e279ca8cfd66b7070c4020daa3377bce2cf21 (patch) | |
tree | c889989a0f335ee0b8ed1454bccb0692fe285cc0 | |
parent | 27763c14c97feecb1cc377ed6a63b67167d6995d (diff) |
[drape] if we streams on "after end" memory, we don't create new stack pointer. New pointer can intersect with correct pointer of other object that also registered in pointer tracker
-rw-r--r-- | drape/attribute_provider.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drape/attribute_provider.cpp b/drape/attribute_provider.cpp index df6274f03a..1710871abd 100644 --- a/drape/attribute_provider.cpp +++ b/drape/attribute_provider.cpp @@ -54,12 +54,16 @@ void AttributeProvider::Advance(uint16_t vertexCount) { ASSERT_LESS_OR_EQUAL(vertexCount, m_vertexCount, ()); CHECK_STREAMS; - for (size_t i = 0; i < GetStreamCount(); ++i) + + if (m_vertexCount != vertexCount) { - const BindingInfo & info = m_streams[i].m_binding; - uint32_t offset = vertexCount * info.GetElementSize(); - void * rawPointer = m_streams[i].m_data.GetRaw(); - m_streams[i].m_data = MakeStackRefPointer((void *)(((uint8_t *)rawPointer) + offset)); + for (size_t i = 0; i < GetStreamCount(); ++i) + { + const BindingInfo & info = m_streams[i].m_binding; + uint32_t offset = vertexCount * info.GetElementSize(); + void * rawPointer = m_streams[i].m_data.GetRaw(); + m_streams[i].m_data = MakeStackRefPointer((void *)(((uint8_t *)rawPointer) + offset)); + } } m_vertexCount -= vertexCount; |