reversed meshbuffer cache
authorPerttu Ahola <celeron55@gmail.com>
Mon, 29 Nov 2010 11:04:03 +0000 (13:04 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Mon, 29 Nov 2010 11:04:03 +0000 (13:04 +0200)
src/mapblock.cpp

index f525ed3e9dda96708e69ccc7ccb5e011a8b03773..25561008a1796beb9ffafa8fffdde1701762ddce 100644 (file)
@@ -297,8 +297,6 @@ void MapBlock::updateMesh()
 
        core::list<FastFace*> *fastfaces_new = new core::list<FastFace*>;
        
-       //TimeTaker timer1("updateMesh1", g_device);
-
        /*
                We are including the faces of the trailing edges of the block.
                This means that when something changes, the caller must
@@ -342,26 +340,12 @@ void MapBlock::updateMesh()
                }
        }
 
-       //timer1.stop();
-       //TimeTaker timer2("updateMesh2", g_device);
-
        scene::SMesh *mesh_new = NULL;
-
-       //s32 appendtime = 0;
        
        if(fastfaces_new->getSize() > 0)
        {
                mesh_new = new scene::SMesh();
                scene::IMeshBuffer *buf = NULL;
-               
-               /*
-                       Buffer for lesser calls to
-                       mesh_new->getMeshBuffer(g_materials[f->material]),
-                       which is slow.
-
-                       key = material id, value = meshbuffer of that material
-               */
-               core::map<u8, scene::IMeshBuffer*> bufs;
 
                core::list<FastFace*>::Iterator i = fastfaces_new->begin();
 
@@ -375,43 +359,27 @@ void MapBlock::updateMesh()
                        if(f->material != material_in_use || buf == NULL)
                        {
                                // Try to get a meshbuffer associated with the material
-                               core::map<u8, scene::IMeshBuffer*>::Node*
-                                               n = bufs.find(f->material);
-
-                               if(n != NULL)
+                               buf = mesh_new->getMeshBuffer(g_materials[f->material]);
+                               // If not found, create one
+                               if(buf == NULL)
                                {
-                                       buf = n->getValue();
-                               }
-                               else
-                               {
-                                       buf = mesh_new->getMeshBuffer(g_materials[f->material]);
-                                       // If not found, create one
-                                       if(buf == NULL)
-                                       {
-                                               // This is a "Standard MeshBuffer",
-                                               // it's a typedeffed CMeshBuffer<video::S3DVertex>
-                                               buf = new scene::SMeshBuffer();
-                                               bufs[f->material] = buf;
-                                               // Set material
-                                               ((scene::SMeshBuffer*)buf)->Material = g_materials[f->material];
-                                               // Use VBO
-                                               //buf->setHardwareMappingHint(scene::EHM_STATIC);
-                                               // Add to mesh
-                                               mesh_new->addMeshBuffer(buf);
-                                               // Mesh grabbed it
-                                               buf->drop();
-                                       }
+                                       // This is a "Standard MeshBuffer",
+                                       // it's a typedeffed CMeshBuffer<video::S3DVertex>
+                                       buf = new scene::SMeshBuffer();
+                                       // Set material
+                                       ((scene::SMeshBuffer*)buf)->Material = g_materials[f->material];
+                                       // Use VBO
+                                       //buf->setHardwareMappingHint(scene::EHM_STATIC);
+                                       // Add to mesh
+                                       mesh_new->addMeshBuffer(buf);
+                                       // Mesh grabbed it
+                                       buf->drop();
                                }
                                material_in_use = f->material;
                        }
 
                        u16 indices[] = {0,1,2,2,3,0};
-
-                       //TimeTaker timer("", g_device);
-
                        buf->append(f->vertices, 4, indices, 6);
-                       
-                       //appendtime += timer.stop(true);
                }
 
                // Use VBO for mesh (this just would set this for ever buffer)
@@ -422,8 +390,6 @@ void MapBlock::updateMesh()
                                <<" materials"<<std::endl;*/
        }
 
-       //dstream<<"appendtime="<<appendtime<<std::endl;
-
        // TODO: Get rid of the FastFace stage
        core::list<FastFace*>::Iterator i;
        i = fastfaces_new->begin();