From 36213f13c4794136d810bd84b5e118fc11f7b3f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 14 Dec 2011 21:33:48 +0100 Subject: [PATCH] MeshBuilder: reworked index builder. Moved code which doesn't depend on index type outside this templated function for smaller size of generated code. --- src/MeshBuilder.h | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/MeshBuilder.h b/src/MeshBuilder.h index 3e72f13a1..a48647be5 100644 --- a/src/MeshBuilder.h +++ b/src/MeshBuilder.h @@ -274,8 +274,11 @@ template class MeshBuilder { * them. * @note The mesh is @b not cleaned before building. */ - inline void build(IndexedMesh* mesh, Buffer* vertexBuffer, Buffer::Usage vertexBufferUsage, Buffer::Usage indexBufferUsage) { - SizeBasedCall(_vertices.size())(this, mesh, vertexBuffer, vertexBufferUsage, indexBufferUsage); + void build(IndexedMesh* mesh, Buffer* vertexBuffer, Buffer::Usage vertexBufferUsage, Buffer::Usage indexBufferUsage) { + mesh->setPrimitive(Mesh::Triangles); + mesh->setVertexCount(_vertices.size()); + vertexBuffer->setData(sizeof(Vertex)*_vertices.size(), _vertices.data(), vertexBufferUsage); + SizeBasedCall(_vertices.size())(mesh, _faces, indexBufferUsage); } /** @@ -315,25 +318,22 @@ template class MeshBuilder { HashedVertex(VertexPointer oldVertexPointer, VertexPointer newVertexPointer): oldVertexPointer(oldVertexPointer), newVertexPointer(newVertexPointer) {} }; - struct InternalBuilder { - template static void run(MeshBuilder* builder, IndexedMesh* mesh, Buffer* vertexBuffer, Buffer::Usage vertexBufferUsage, Buffer::Usage indexBufferUsage) { - /* Compress face array to index array. Using TypeTraits::IndexType - to ensure we have allowed type for indexing */ + struct IndexBuilder { + template static void run(IndexedMesh* mesh, const std::vector& faces, Buffer::Usage indexBufferUsage) { + /* Compress face array to index array. Using + TypeTraits::IndexType to ensure we have allowed type for + indexing */ std::vector::IndexType> indices; - indices.reserve(builder->_faces.size()*3); - for(auto it = builder->_faces.cbegin(); it != builder->_faces.cend(); ++it) { + indices.reserve(faces.size()*3); + for(auto it = faces.cbegin(); it != faces.cend(); ++it) { indices.push_back(it->vertices[0]); indices.push_back(it->vertices[1]); indices.push_back(it->vertices[2]); } - /* Update mesh parameters and fill it with data */ - mesh->setPrimitive(Mesh::Triangles); - mesh->setVertexCount(builder->_vertices.size()); + /* Update mesh parameters and fill index buffer */ mesh->setIndexCount(indices.size()); mesh->setIndexType(TypeTraits::glType()); - - vertexBuffer->setData(sizeof(Vertex)*builder->_vertices.size(), builder->_vertices.data(), vertexBufferUsage); mesh->indexBuffer()->setData(sizeof(IndexType)*indices.size(), indices.data(), indexBufferUsage); } };