1
0

Handle byte stride on vertex buffers

Vertex buffers (and only vertex buffers) may have a byte stride
specified.
This commit is contained in:
JosiahWI
2023-11-29 19:57:58 -06:00
committed by Josiah VanderZee
parent 86026f9205
commit 95a4030b50
4 changed files with 93 additions and 3 deletions

View File

@@ -224,10 +224,11 @@ void CGLTFMeshFileLoader::MeshExtractor::copyPositions(
const auto& buffer = getBuffer(accessorIdx);
const auto count = getElemCount(accessorIdx);
const auto byteStride = getByteStride(accessorIdx);
for (std::size_t i = 0; i < count; i++) {
const auto v = readVec3DF(BufferOffset(buffer,
3 * sizeof(float) * i), getScale());
(byteStride * i)), getScale());
vertices[i].Pos = v;
}
}
@@ -275,6 +276,14 @@ std::size_t CGLTFMeshFileLoader::MeshExtractor::getElemCount(
return m_model.accessors[accessorIdx].count;
}
std::size_t CGLTFMeshFileLoader::MeshExtractor::getByteStride(
const std::size_t accessorIdx) const
{
const auto& accessor = m_model.accessors[accessorIdx];
const auto& view = m_model.bufferViews[accessor.bufferView];
return accessor.ByteStride(view);
}
CGLTFMeshFileLoader::BufferOffset CGLTFMeshFileLoader::MeshExtractor::getBuffer(
const std::size_t accessorIdx) const
{