]> git.lizzy.rs Git - minetest.git/commitdiff
Limit force shadow update to urgent blocks (#12692)
authorx2048 <codeforsmile@gmail.com>
Sun, 14 Aug 2022 18:29:20 +0000 (20:29 +0200)
committerGitHub <noreply@github.com>
Sun, 14 Aug 2022 18:29:20 +0000 (20:29 +0200)
src/client/client.cpp
src/client/mesh_generator_thread.cpp
src/client/mesh_generator_thread.h

index 31bbf24635d8abd273ac441305b7857df3b841c4..b7d1cbfe03d63ccb9c7549ca9a07a9341d832bbf 100644 (file)
@@ -574,7 +574,8 @@ void Client::step(float dtime)
                                        else {
                                                // Replace with the new mesh
                                                block->mesh = r.mesh;
-                                               force_update_shadows = true;
+                                               if (r.urgent)
+                                                       force_update_shadows = true;
                                        }
                                }
                        } else {
index c1bd7388edbed7390fa5548656032b06fe530007..ec567c8c1fdd4be3110cfef0eaa92c94e344fee8 100644 (file)
@@ -113,6 +113,7 @@ bool MeshUpdateQueue::addBlock(Map *map, v3s16 p, bool ack_block_to_server, bool
                                q->ack_block_to_server = true;
                        q->crack_level = m_client->getCrackLevel();
                        q->crack_pos = m_client->getCrackPos();
+                       q->urgent |= urgent;
                        return true;
                }
        }
@@ -125,6 +126,7 @@ bool MeshUpdateQueue::addBlock(Map *map, v3s16 p, bool ack_block_to_server, bool
        q->ack_block_to_server = ack_block_to_server;
        q->crack_level = m_client->getCrackLevel();
        q->crack_pos = m_client->getCrackPos();
+       q->urgent = urgent;
        m_queue.push_back(q);
 
        // This queue entry is a new reference to the cached blocks
@@ -310,6 +312,7 @@ void MeshUpdateThread::doUpdate()
                r.p = q->p;
                r.mesh = mesh_new;
                r.ack_block_to_server = q->ack_block_to_server;
+               r.urgent = q->urgent;
 
                m_queue_out.push_back(r);
 
index 552b2a9f05206a303af93201a930340601e2db82..09400196dd9df009cb5cca3d924bc14f7e003caa 100644 (file)
@@ -45,6 +45,7 @@ struct QueuedMeshUpdate
        int crack_level = -1;
        v3s16 crack_pos;
        MeshMakeData *data = nullptr; // This is generated in MeshUpdateQueue::pop()
+       bool urgent = false;
 
        QueuedMeshUpdate() = default;
        ~QueuedMeshUpdate();
@@ -105,6 +106,7 @@ struct MeshUpdateResult
        v3s16 p = v3s16(-1338, -1338, -1338);
        MapBlockMesh *mesh = nullptr;
        bool ack_block_to_server = false;
+       bool urgent = false;
 
        MeshUpdateResult() = default;
 };