diff --git a/src/Nazara/Utility/Loaders/MD5Mesh/Parser.cpp b/src/Nazara/Utility/Loaders/MD5Mesh/Parser.cpp index 9fc35c918..642efc000 100644 --- a/src/Nazara/Utility/Loaders/MD5Mesh/Parser.cpp +++ b/src/Nazara/Utility/Loaders/MD5Mesh/Parser.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -189,31 +190,15 @@ bool NzMD5MeshParser::Parse(NzMesh* mesh) bool largeIndices = (vertexCount > std::numeric_limits::max()); std::unique_ptr indexBuffer(new NzIndexBuffer(indexCount, largeIndices, m_parameters.storage)); - NzBufferMapper indexMapper(indexBuffer.get(), nzBufferAccess_DiscardAndWrite); + NzIndexMapper indexMapper(indexBuffer.get(), nzBufferAccess_DiscardAndWrite); - if (largeIndices) + unsigned int index = 0; + for (const Mesh::Triangle& triangle : md5Mesh.triangles) { - nzUInt32* index = reinterpret_cast(indexMapper.GetPointer()); - - for (const Mesh::Triangle& triangle : md5Mesh.triangles) - { - // On les respécifie dans le bon ordre - *index++ = triangle.x; - *index++ = triangle.z; - *index++ = triangle.y; - } - } - else - { - nzUInt16* index = reinterpret_cast(indexMapper.GetPointer()); - - for (const Mesh::Triangle& triangle : md5Mesh.triangles) - { - // On les respécifie dans le bon ordre - *index++ = triangle.x; - *index++ = triangle.z; - *index++ = triangle.y; - } + // On les respécifie dans le bon ordre + indexMapper.Set(index++, triangle.x); + indexMapper.Set(index++, triangle.z); + indexMapper.Set(index++, triangle.y); } indexMapper.Unmap(); @@ -307,31 +292,15 @@ bool NzMD5MeshParser::Parse(NzMesh* mesh) bool largeIndices = (vertexCount > std::numeric_limits::max()); std::unique_ptr indexBuffer(new NzIndexBuffer(indexCount, largeIndices, m_parameters.storage)); - NzBufferMapper indexMapper(indexBuffer.get(), nzBufferAccess_DiscardAndWrite); + NzIndexMapper indexMapper(indexBuffer.get(), nzBufferAccess_DiscardAndWrite); - if (largeIndices) + unsigned int index = 0; + for (const Mesh::Triangle& triangle : md5Mesh.triangles) { - nzUInt32* index = reinterpret_cast(indexMapper.GetPointer()); - - for (const Mesh::Triangle& triangle : md5Mesh.triangles) - { - // On les respécifie dans le bon ordre - *index++ = triangle.x; - *index++ = triangle.z; - *index++ = triangle.y; - } - } - else - { - nzUInt16* index = reinterpret_cast(indexMapper.GetPointer()); - - for (const Mesh::Triangle& triangle : md5Mesh.triangles) - { - // On les respécifie dans le bon ordre - *index++ = triangle.x; - *index++ = triangle.z; - *index++ = triangle.y; - } + // On les respécifie dans le bon ordre + indexMapper.Set(index++, triangle.x); + indexMapper.Set(index++, triangle.z); + indexMapper.Set(index++, triangle.y); } indexMapper.Unmap();