diff options
author | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2012-02-17 19:24:34 +0100 |
---|---|---|
committer | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2012-02-17 19:24:34 +0100 |
commit | 7a9925f982e43fcc1d798318905d83b5805b12cc (patch) | |
tree | 2bd2a78cedb2d9ddf1ce5f09be102786994f9dd7 /source/LightingThread.h | |
parent | Chunk coords mostly "upgraded" to include the Y coord for future compatibility (diff) | |
download | cuberite-7a9925f982e43fcc1d798318905d83b5805b12cc.tar cuberite-7a9925f982e43fcc1d798318905d83b5805b12cc.tar.gz cuberite-7a9925f982e43fcc1d798318905d83b5805b12cc.tar.bz2 cuberite-7a9925f982e43fcc1d798318905d83b5805b12cc.tar.lz cuberite-7a9925f982e43fcc1d798318905d83b5805b12cc.tar.xz cuberite-7a9925f982e43fcc1d798318905d83b5805b12cc.tar.zst cuberite-7a9925f982e43fcc1d798318905d83b5805b12cc.zip |
Diffstat (limited to 'source/LightingThread.h')
-rw-r--r-- | source/LightingThread.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/source/LightingThread.h b/source/LightingThread.h new file mode 100644 index 000000000..5b60d34bf --- /dev/null +++ b/source/LightingThread.h @@ -0,0 +1,82 @@ +
+// LightingThread.h
+
+// Interfaces to the cLightingThread class representing the thread that processes requests for lighting
+// Note that the world generators need direct access to the lighting methods so that they can light the generated chunk
+
+
+
+
+#pragma once
+
+#include "cIsThread.h"
+
+
+
+
+
+// fwd:
+class cWorld;
+
+
+
+
+
+class cLightingThread :
+ public cIsThread
+{
+ typedef cIsThread super;
+
+public:
+
+ class cLightingBuffer
+ {
+ public:
+ cLightingBuffer(int m_MinX, int m_MaxX, int m_MinY, int m_MaxY, int m_MinZ, int m_MaxZ);
+
+ /// Copies the world's existing chunks into m_BlockData, m_Skylight and m_BlockLight
+ void GetFromWorld(cWorld * a_World);
+ void SetToWorld (cWorld * a_World);
+
+ void Process(void); // Does the actual lighting on this buffer
+
+ protected:
+
+ // Block coords:
+ int m_MinX, m_MaxX;
+ int m_MinY, m_MaxY;
+ int m_MinZ, m_MaxZ;
+
+ int m_StrideX; // = OffsetOfBlock(x, y, z) - OffsetOfBlock(x + 1, y, z)
+ int m_StrideZ; // = OffsetOfBlock(x, y, z) - OffsetOfBlock(x, y, z + 1)
+
+ // These buffers actually store 1 block in each direction more than is specified in the coords
+ // This way we can throw out a lot of conditions inside the processing cycles
+ // And it allows us to light a chunk with regard to its surrounding chunks without much work
+ // (So if m_MinX is 16 and m_MaxX is 32, the buffers actually contain data for X in range from 15 to 33 (18 items)
+ char * m_BlockData;
+ char * m_SkyLight;
+ char * m_BlockLight;
+ } ;
+
+ cLightingThread(void);
+ ~cLightingThread();
+
+ void Stop(void);
+
+ void QueueLighting(cWorld * a_World, int a_MinX, int a_MaxX, int a_MinY, int a_MaxY, int a_MinZ, int a_MaxZ); // queues the request
+
+protected:
+
+ typedef std::list<cLightingBuffer *> cLightingBufferQueue;
+
+ cCriticalSection m_CS;
+ cLightingBufferQueue m_Queue;
+ cEvent m_Event; // Set when queue is appended or to stop the thread
+
+ virtual void Execute(void) override;
+} ;
+
+
+
+
|