]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/client/clientmap.cpp
Merge branch 'master' of https://github.com/minetest/minetest
[dragonfireclient.git] / src / client / clientmap.cpp
index 51f0f6896774dc10a64cb622c0b5499f492a5586..85b765709ebff6581ce8385b0df0758e984d4fed 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) {
@@ -489,6 +481,8 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
                                // Do not enable filter on shadow texture to avoid visual artifacts
                                // with colored shadows.
                                // Filtering is done in shader code anyway
+                               layer.BilinearFilter = false;
+                               layer.AnisotropicFilter = false;
                                layer.TrilinearFilter = false;
                        }
                        driver->setMaterial(material);
@@ -499,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();
        }
 
@@ -810,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) {
@@ -843,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();
        }
 
@@ -964,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);
+       }
+}