diff --git a/src/client/mapblock_mesh.cpp b/src/client/mapblock_mesh.cpp index 9b5612148..04c50ad99 100644 --- a/src/client/mapblock_mesh.cpp +++ b/src/client/mapblock_mesh.cpp @@ -906,6 +906,7 @@ void MapBlockMesh::updateTransparentBuffers(v3f camera_pos, v3s16 block_pos) m_bsp_tree.traverse(rel_camera_pos, triangle_refs); // arrange index sequences into partial buffers + m_transparent_buffers_consolidated = false; m_transparent_buffers.clear(); scene::SMeshBuffer *current_buffer = nullptr; @@ -930,6 +931,8 @@ void MapBlockMesh::updateTransparentBuffers(v3f camera_pos, v3s16 block_pos) void MapBlockMesh::consolidateTransparentBuffers() { + if (m_transparent_buffers_consolidated) + return; m_transparent_buffers.clear(); scene::SMeshBuffer *current_buffer = nullptr; @@ -952,6 +955,8 @@ void MapBlockMesh::consolidateTransparentBuffers() if (!current_strain.empty()) { this->m_transparent_buffers.emplace_back(current_buffer, std::move(current_strain)); } + + m_transparent_buffers_consolidated = true; } video::SColor encode_light(u16 light, u8 emissive_light) diff --git a/src/client/mapblock_mesh.h b/src/client/mapblock_mesh.h index 7cd368762..6ddd988aa 100644 --- a/src/client/mapblock_mesh.h +++ b/src/client/mapblock_mesh.h @@ -282,6 +282,8 @@ private: MapBlockBspTree m_bsp_tree; // Ordered list of references to parts of transparent buffers to draw std::vector m_transparent_buffers; + // Is m_transparent_buffers currently in consolidated form? + bool m_transparent_buffers_consolidated = false; }; /*!