HPC_Voxel_Engine 0.2.0
High-Performance C++ Voxel Engine
Loading...
Searching...
No Matches
ChunkManager.h
Go to the documentation of this file.
1
7#pragma once
8
9#include <algorithm>
10#include <cmath>
11#include <iostream>
12#include <map>
13#include <memory>
14#include <mutex>
15#include <optional>
16#include <set>
17#include <string>
18
19#include "../core/ThreadPool.h"
20#include "../core/ThreadSafeQueue.h"
21#include "Chunk.h"
22#include "RegionManager.h"
23
24namespace Renderer {
25class Shader;
26}
27
34public:
35 ChunkManager() = delete;
36 ChunkManager(std::string& strFolderPath) : m_objRegionManager(strFolderPath) {}
37
44 void Update(float fPlayerX, float fPlayerZ);
45
46 void ReloadAllChunks();
47
51 void SetBlock(int iWorldX, int iWorldY, int iWorldZ, uint8_t iBlockType);
52
56 void SaveWorld();
57
61 Chunk* GetChunk(int iX, int iZ);
62 const Chunk* GetChunk(int iX, int iZ) const;
63
64 std::map<std::pair<int, int>, std::unique_ptr<Chunk>>& GetMutableChunks() {
65 return m_mapChunks;
66 }
67
68 const std::map<std::pair<int, int>, std::unique_ptr<Chunk>>& GetChunks() const {
69 return m_mapChunks;
70 }
71 void SetActiveThreads(int iCt) { m_iActiveThreads = iCt; }
73
76
80
84
85 void SetNeighborCulling(bool bNeighborCulling) { m_bEnableNeighborCulling = bNeighborCulling; }
87
88private:
89 void enqueueLoadChunk(int iX, int iZ);
90 void updateChunkNeighbours(Chunk* pChunk);
92
93 std::map<std::pair<int, int>, std::unique_ptr<Chunk>> m_mapChunks;
94
95 std::set<std::pair<int, int>> m_setPendingCoords;
96 std::mutex m_mutexPending;
97
99
100 // ThreadPool must be destroyed BEFORE the queue to avoid use-after-free
103
105 int m_iLastPlayerChunkX = -999999;
106 int m_iLastPlayerChunkZ = -999999;
113};
Defines the Chunk class representing a localized 3D grid of voxels and its thermal data.
Orchestrates infinite world generation, active chunk tracking, and multi-threaded data loading.
Definition ChunkManager.h:33
Core::ThreadPool m_objThreadPool
Definition ChunkManager.h:102
int m_iLastPlayerChunkX
Definition ChunkManager.h:105
size_t GetGeneratedVertCount() const
Definition ChunkManager.h:74
size_t m_iUploadedVertexCount
Definition ChunkManager.h:110
std::mutex m_mutexPending
Definition ChunkManager.h:96
void SetBlock(int iWorldX, int iWorldY, int iWorldZ, uint8_t iBlockType)
Modifies a voxel block and invalidates necessary chunk meshes (including boundaries).
Definition ChunkManager.cpp:123
size_t m_iGeneratedTriangleCount
Definition ChunkManager.h:109
const std::map< std::pair< int, int >, std::unique_ptr< Chunk > > & GetChunks() const
Definition ChunkManager.h:68
ChunkManager()=delete
int m_iRenderDistance
Definition ChunkManager.h:104
void Update(float fPlayerX, float fPlayerZ)
Core lifecycle loop. Synchronizes asynchronous chunks and manages the active render radius.
Definition ChunkManager.cpp:10
std::map< std::pair< int, int >, std::unique_ptr< Chunk > > & GetMutableChunks()
Definition ChunkManager.h:64
bool m_bEnableNeighborCulling
Definition ChunkManager.h:112
Chunk * GetChunk(int iX, int iZ)
Retrieves a pointer to a loaded chunk. Returns nullptr if not loaded.
Definition ChunkManager.cpp:191
void updateGeneratedMeshStats()
Definition ChunkManager.cpp:100
void updateChunkNeighbours(Chunk *pChunk)
Definition ChunkManager.cpp:222
bool GetNeighborCulling() const
Definition ChunkManager.h:86
std::map< std::pair< int, int >, std::unique_ptr< Chunk > > m_mapChunks
Definition ChunkManager.h:93
size_t GetGeneratedTriaCount() const
Definition ChunkManager.h:75
void AddToUploadedVertCount(size_t iCt)
Definition ChunkManager.h:77
void ResetUploadedTriaCount()
Definition ChunkManager.h:82
int m_iActiveThreads
Definition ChunkManager.h:107
size_t GetUploadedTriaCount() const
Definition ChunkManager.h:83
size_t m_iUploadedTriangleCount
Definition ChunkManager.h:111
int m_iLastPlayerChunkZ
Definition ChunkManager.h:106
void AddToUploadedTriaCount(size_t iCt)
Definition ChunkManager.h:81
RegionManager m_objRegionManager
Definition ChunkManager.h:98
std::set< std::pair< int, int > > m_setPendingCoords
Definition ChunkManager.h:95
void SetNeighborCulling(bool bNeighborCulling)
Definition ChunkManager.h:85
ChunkManager(std::string &strFolderPath)
Definition ChunkManager.h:36
void SetActiveThreads(int iCt)
Definition ChunkManager.h:71
size_t m_iGeneratedVertexCount
Definition ChunkManager.h:108
int GetActiveThreads()
Definition ChunkManager.h:72
void enqueueLoadChunk(int iX, int iZ)
Definition ChunkManager.cpp:207
void ResetUploadedVertCount()
Definition ChunkManager.h:78
Core::ThreadSafeQueue< Chunk > m_objFinishedQueue
Definition ChunkManager.h:101
void ReloadAllChunks()
Definition ChunkManager.cpp:113
size_t GetUploadedVertCount() const
Definition ChunkManager.h:79
void SaveWorld()
Persists all active chunks to disk.
Definition ChunkManager.cpp:183
Manages voxel block data, procedural mesh generation, and memory-aligned thermal diffusion buffers.
Definition Chunk.h:39
Manages a pool of worker threads that consume tasks from a ThreadSafeQueue. Utilizes C++20 std::jthre...
Definition ThreadPool.h:17
A thread-safe FIFO queue wrapper using mutexes and condition variables. Designed for producer-consume...
Definition ThreadSafeQueue.h:17
Definition RegionManager.h:19
Definition Buffer.h:4