diff --git a/source/core/source/device/dvc_buffer_accessor.cpp b/source/core/source/device/dvc_buffer_accessor.cpp index b480839..09dcc47 100644 --- a/source/core/source/device/dvc_buffer_accessor.cpp +++ b/source/core/source/device/dvc_buffer_accessor.cpp @@ -25,10 +25,11 @@ void DeviceBufferAccessor::walk(std::function call DeviceBufferConstPtr buffer = m_bufferView->getBuffer(); const uint8_t* ptr = buffer->ptr(m_bufferView->getOffset()) + m_offset; + const size_t step = m_bufferView->getStride() > 0 ? m_bufferView->getStride() : m_elementSize; size_t startIndex = start; size_t endIndex = (end == ((size_t)-1)) ? m_count : end; - for (size_t index = startIndex; index < endIndex; index++, ptr+=m_elementSize) + for (size_t index = startIndex; index < endIndex; index++, ptr+=step) { if (callback(ptr, index)) { @@ -44,12 +45,13 @@ void DeviceBufferAccessor::walk2(std::functiongetBuffer(); const uint8_t* ptr = buffer->ptr(m_bufferView->getOffset()) + m_offset; + const size_t step = m_bufferView->getStride() > 0 ? m_bufferView->getStride() : m_elementSize; size_t startIndex = start; size_t endIndex = (end == ((size_t)-1)) ? m_count : end; - for (size_t index = startIndex; index < endIndex; index+=2, ptr+=m_elementSize*2) + for (size_t index = startIndex; index < endIndex; index+=2, ptr+=step*2) { - if (callback(ptr, ((index + 1) < endIndex) ? (ptr + m_elementSize) : nullptr, index)) + if (callback(ptr, ((index + 1) < endIndex) ? (ptr + step) : nullptr, index)) { break; } @@ -63,14 +65,15 @@ void DeviceBufferAccessor::walk3(std::functiongetBuffer(); const uint8_t* ptr = buffer->ptr(m_bufferView->getOffset()) + m_offset; + const size_t step = m_bufferView->getStride() > 0 ? m_bufferView->getStride() : m_elementSize; size_t startIndex = start; size_t endIndex = (end == ((size_t)-1)) ? m_count : end; - for (size_t index = startIndex; index < endIndex; index += 3, ptr += m_elementSize * 3) + for (size_t index = startIndex; index < endIndex; index += 3, ptr += step * 3) { if(callback(ptr, - ((index + 1) < endIndex) ? (ptr + m_elementSize) : nullptr, - ((index + 2) < endIndex) ? (ptr + m_elementSize*2) : nullptr, + ((index + 1) < endIndex) ? (ptr + step) : nullptr, + ((index + 2) < endIndex) ? (ptr + step*2) : nullptr, index)) { break; @@ -85,7 +88,9 @@ const uint8_t* DeviceBufferAccessor::getElement(size_t index) const } DeviceBufferConstPtr buffer = m_bufferView->getBuffer(); - const uint8_t* pData = buffer->ptr(m_bufferView->getOffset()) + m_offset + index * m_elementSize; + const uint8_t* pData = buffer->ptr(m_bufferView->getOffset()) + + m_offset + + index * (m_bufferView->getStride()>0 ? m_bufferView->getStride(): m_elementSize); return pData; }