diff options
author | RealBadAngel <maciej.kasatkin@o2.pl> | 2014-10-15 04:13:53 +0200 |
---|---|---|
committer | RealBadAngel <maciej.kasatkin@o2.pl> | 2014-10-18 16:42:23 +0200 |
commit | 0066bd77d25793b76fdaa9a62755cca934f0121d (patch) | |
tree | 61760994616113cd307d6dc6c2980f5f547fa78f /src/mapblock_mesh.cpp | |
parent | d1ccc64e1ecfd00df36d2b8a8b3420b70434fefd (diff) | |
download | minetest-0066bd77d25793b76fdaa9a62755cca934f0121d.tar.gz minetest-0066bd77d25793b76fdaa9a62755cca934f0121d.tar.bz2 minetest-0066bd77d25793b76fdaa9a62755cca934f0121d.zip |
Add meshnode drawtype.
Diffstat (limited to 'src/mapblock_mesh.cpp')
-rw-r--r-- | src/mapblock_mesh.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp index d75d3e148..a7fafa683 100644 --- a/src/mapblock_mesh.cpp +++ b/src/mapblock_mesh.cpp @@ -1428,3 +1428,54 @@ void MeshCollector::append(const TileSpec &tile, p->vertices.push_back(vertices[i]); } } + +/* + MeshCollector - for meshnodes and converted drawtypes. +*/ + +void MeshCollector::append(const TileSpec &tile, + const video::S3DVertex *vertices, u32 numVertices, + const u16 *indices, u32 numIndices, + v3f pos, video::SColor c) +{ + if(numIndices > 65535) + { + dstream<<"FIXME: MeshCollector::append() called with numIndices="<<numIndices<<" (limit 65535)"<<std::endl; + return; + } + + PreMeshBuffer *p = NULL; + for(u32 i=0; i<prebuffers.size(); i++) + { + PreMeshBuffer &pp = prebuffers[i]; + if(pp.tile != tile) + continue; + if(pp.indices.size() + numIndices > 65535) + continue; + + p = &pp; + break; + } + + if(p == NULL) + { + PreMeshBuffer pp; + pp.tile = tile; + prebuffers.push_back(pp); + p = &prebuffers[prebuffers.size()-1]; + } + + u32 vertex_count = p->vertices.size(); + for(u32 i=0; i<numIndices; i++) + { + u32 j = indices[i] + vertex_count; + p->indices.push_back(j); + } + for(u32 i=0; i<numVertices; i++) + { + video::S3DVertex vert = vertices[i]; + vert.Pos += pos; + vert.Color = c; + p->vertices.push_back(vert); + } +} |