]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/client/clientmap.cpp
Fixes needed to use irrArray backed by std::vector (#12263)
[dragonfireclient.git] / src / client / clientmap.cpp
index 46cb115aae398ed25b0cda8486d6392268de6063..98e3f40d3acb56fbe5485c6073e3e9b15ee05c69 100644 (file)
@@ -449,15 +449,7 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
        drawcall_count += draw_order.size();
 
        for (auto &descriptor : draw_order) {
-               scene::IMeshBuffer *buf;
-               
-               if (descriptor.m_use_partial_buffer) {
-                       descriptor.m_partial_buffer->beforeDraw();
-                       buf = descriptor.m_partial_buffer->getBuffer();
-               }
-               else {
-                       buf = descriptor.m_buffer;
-               }
+               scene::IMeshBuffer *buf = descriptor.getBuffer();
 
                // Check and abort if the machine is swapping a lot
                if (draw.getTimerTime() > 2000) {
@@ -501,7 +493,7 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
                m.setTranslation(block_wpos - offset);
 
                driver->setTransform(video::ETS_WORLD, m);
-               driver->drawMeshBuffer(buf);
+               descriptor.draw(driver);
                vertex_count += buf->getIndexCount();
        }
 
@@ -812,15 +804,7 @@ void ClientMap::renderMapShadows(video::IVideoDriver *driver,
        drawcall_count += draw_order.size();
 
        for (auto &descriptor : draw_order) {
-               scene::IMeshBuffer *buf;
-               
-               if (descriptor.m_use_partial_buffer) {
-                       descriptor.m_partial_buffer->beforeDraw();
-                       buf = descriptor.m_partial_buffer->getBuffer();
-               }
-               else {
-                       buf = descriptor.m_buffer;
-               }
+               scene::IMeshBuffer *buf = descriptor.getBuffer();
 
                // Check and abort if the machine is swapping a lot
                if (draw.getTimerTime() > 1000) {
@@ -845,7 +829,7 @@ void ClientMap::renderMapShadows(video::IVideoDriver *driver,
                m.setTranslation(block_wpos - offset);
 
                driver->setTransform(video::ETS_WORLD, m);
-               driver->drawMeshBuffer(buf);
+               descriptor.draw(driver);
                vertex_count += buf->getIndexCount();
        }
 
@@ -966,3 +950,18 @@ void ClientMap::updateTransparentMeshBuffers()
        m_needs_update_transparent_meshes = false;
 }
 
+scene::IMeshBuffer* ClientMap::DrawDescriptor::getBuffer()
+{
+       return m_use_partial_buffer ? m_partial_buffer->getBuffer() : m_buffer;
+}
+
+void ClientMap::DrawDescriptor::draw(video::IVideoDriver* driver)
+{
+       if (m_use_partial_buffer) {
+               m_partial_buffer->beforeDraw();
+               driver->drawMeshBuffer(m_partial_buffer->getBuffer());
+               m_partial_buffer->afterDraw();
+       } else {
+               driver->drawMeshBuffer(m_buffer);
+       }
+}