From 935e279ca8cfd66b7070c4020daa3377bce2cf21 Mon Sep 17 00:00:00 2001 From: ExMix Date: Tue, 4 Feb 2014 18:36:20 +0300 Subject: [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 --- drape/attribute_provider.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'drape/attribute_provider.cpp') 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; -- cgit v1.2.3