Remove 'Meshbuffer ran out of indices' limitation
authorKahrl <kahrl@gmx.net>
Thu, 25 Apr 2013 16:32:18 +0000 (18:32 +0200)
committerPilzAdam <pilzadam@minetest.net>
Mon, 6 May 2013 17:06:18 +0000 (19:06 +0200)
src/mapblock_mesh.cpp

index f8a0b5f0631a412f612ee4a3bb6424823bd259bf..0f83e863c0bbaf44f1218618d1538a4b158e7fbb 100644 (file)
@@ -1338,12 +1338,20 @@ void MeshCollector::append(const TileSpec &tile,
                const video::S3DVertex *vertices, u32 numVertices,
                const u16 *indices, u32 numIndices)
 {
+       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;
@@ -1361,11 +1369,6 @@ void MeshCollector::append(const TileSpec &tile,
        for(u32 i=0; i<numIndices; i++)
        {
                u32 j = indices[i] + vertex_count;
-               if(j > 65535)
-               {
-                       dstream<<"FIXME: Meshbuffer ran out of indices"<<std::endl;
-                       // NOTE: Fix is to just add an another MeshBuffer
-               }
                p->indices.push_back(j);
        }
        for(u32 i=0; i<numVertices; i++)