-/*
- A thread-safe queue of mesh update tasks
-*/
-class MeshUpdateQueue
-{
-public:
- MeshUpdateQueue();
-
- ~MeshUpdateQueue();
-
- /*
- peer_id=0 adds with nobody to send to
- */
- void addBlock(v3s16 p, MeshMakeData *data,
- bool ack_block_to_server, bool urgent);
-
- // Returned pointer must be deleted
- // Returns NULL if queue is empty
- QueuedMeshUpdate * pop();
-
- u32 size()
- {
- MutexAutoLock lock(m_mutex);
- return m_queue.size();
- }
-
-private:
- std::vector<QueuedMeshUpdate*> m_queue;
- std::set<v3s16> m_urgents;
- Mutex m_mutex;
-};
-
-struct MeshUpdateResult
-{
- v3s16 p;
- MapBlockMesh *mesh;
- bool ack_block_to_server;
-
- MeshUpdateResult():
- p(-1338,-1338,-1338),
- mesh(NULL),
- ack_block_to_server(false)
- {
- }
-};
-
-class MeshUpdateThread : public UpdateThread
-{
-private:
- MeshUpdateQueue m_queue_in;
-
-protected:
- virtual void doUpdate();
-
-public:
-
- MeshUpdateThread() : UpdateThread("Mesh") {}
-
- void enqueueUpdate(v3s16 p, MeshMakeData *data,
- bool ack_block_to_server, bool urgent);
- MutexedQueue<MeshUpdateResult> m_queue_out;
-
- v3s16 m_camera_offset;
-};
-