正确使用stride
This commit is contained in:
@@ -25,10 +25,11 @@ void DeviceBufferAccessor::walk(std::function<bool(const uint8_t*, size_t)> 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::function<bool(const uint8_t*, const uint8_
|
||||
|
||||
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+=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::function<bool(const uint8_t*, const uint8_
|
||||
|
||||
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 += 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user