From 698c1a10997ea073a9c72a4d68d97d774cf1ac39 Mon Sep 17 00:00:00 2001 From: thejinchao Date: Thu, 9 Oct 2025 21:40:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E4=BD=BF=E7=94=A8stride?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../source/device/dvc_buffer_accessor.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) 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; }