#pragma once #include "Deer/Memory.h" #include "Deer/Voxel.h" #include "DeerRender/Render/VertexArray.h" #include #include #include namespace Deer { struct ChunkRender { Ref solidVoxel; bool hasData = false; }; struct SolidVoxelVertexData { uint16_t textureID = 0; uint8_t ambient_occlusion = 0; uint8_t xPos = 0; uint8_t yPos = 0; uint8_t zPos = 0; uint8_t a_light = 0; uint8_t r_light = 0; uint8_t g_light = 0; uint8_t b_light = 0; uint8_t normal = 0; uint8_t u = 0; uint8_t v = 0; SolidVoxelVertexData() = default; }; class ChunkUpdateQueue { public: // TODO: Add priority void addChunk(ChunkID); ChunkID pullChunk(); bool hasChunk(); private: std::queue m_updateOrder; std::unordered_set m_containingChunks; }; struct VoxelWorldRenderData { VoxelWorldRenderData(size_t chunkCount) { chunksRender = MakeScope(chunkCount); } // Chunk render data Scope chunksRender; ChunkUpdateQueue chunkQueue; // Voxel creation data std::vector indices; std::vector vertexData; std::queue ambientLightPropagation; std::queue voxelLightPropagation; std::vector tmp_voxelLightSource; }; }