8#include <FastNoiseLite.h>
15#include "../core/MathUtils.h"
16#include "../physics/AABB.h"
17#include "../renderer/Buffer.h"
18#include "../renderer/IndexBuffer.h"
19#include "../renderer/ThermalVolume.h"
20#include "../renderer/VertexArray.h"
42 Chunk(
int iX,
int iZ);
94 __m256i vecChunkSize = _mm256_set1_epi32(
CHUNK_SIZE);
98 _mm256_add_epi32(_mm256_add_epi32(vecX, _mm256_mullo_epi32(vecY, vecChunkSize)),
99 _mm256_mullo_epi32(vecZ, vecChunkSizeHeight));
109 if (iX >= 0 && iX < CHUNK_SIZE && iY >= 0 && iY < CHUNK_HEIGHT && iZ >= 0 &&
145 void SetBlockAt(
int iX,
int iY,
int iZ, uint8_t uiBlockType);
163 void ThermalStep(
float fThermalDiffusivity,
float fDeltaTime);
173 void GetMeshStats(
size_t& uiOutVertCount,
size_t& uiOutTriCount)
const {
Direction
Definition Chunk.h:31
@ BELOW
Definition Chunk.h:31
@ SOUTH
Definition Chunk.h:31
@ ABOVE
Definition Chunk.h:31
@ EAST
Definition Chunk.h:31
@ NORTH
Definition Chunk.h:31
@ WEST
Definition Chunk.h:31
FaceDirection
Definition Chunk.h:30
@ FRONT
Definition Chunk.h:30
@ DOWN
Definition Chunk.h:30
@ UP
Definition Chunk.h:30
@ BACK
Definition Chunk.h:30
@ LEFT
Definition Chunk.h:30
@ RIGHT
Definition Chunk.h:30
BlockType
Definition Chunk.h:32
@ STONE
Definition Chunk.h:32
@ AIR
Definition Chunk.h:32
@ DIRT
Definition Chunk.h:32
@ GRASS
Definition Chunk.h:32
constexpr int PADDED_CHUNK_HEIGHT
Definition Chunk.h:27
constexpr int CHUNK_VOL
Definition Chunk.h:24
constexpr int PADDED_CHUNK_SIZE
Definition Chunk.h:26
constexpr int PADDED_CHUNK_VOL
Definition Chunk.h:28
constexpr int CHUNK_HEIGHT
Definition Chunk.h:23
constexpr int CHUNK_SIZE
Definition Chunk.h:22
Axis-Aligned Bounding Box for collision detection. Defined by a Minimum and Maximum point in 3D space...
Definition AABB.h:12
Manages voxel block data, procedural mesh generation, and memory-aligned thermal diffusion buffers.
Definition Chunk.h:39
void InjectHeat(int iX, int iY, int iZ, float fTemp)
Definition Chunk.h:157
void Bind(int iVal)
Definition Chunk.h:168
void ThermalStep_AVX2(float fThermalDiffusivity, float fDeltaTime)
Definition Chunk.cpp:453
int m_iHeightData[CHUNK_SIZE][CHUNK_SIZE]
Definition Chunk.h:195
FastNoiseLite noise
Definition Chunk.h:194
void GetMeshStats(size_t &uiOutVertCount, size_t &uiOutTriCount) const
Definition Chunk.h:173
void Render() const
Definition Chunk.cpp:382
int GetFlatIndexOf3DLayer(int iX, int iY, int iZ) const
Definition Chunk.h:70
Renderer::VertexArray * m_pVAO
Definition Chunk.h:183
int GetChunkX() const
Definition Chunk.h:51
float * m_pfCurrFrameData
Definition Chunk.h:189
void SwapBuffers()
Definition Chunk.h:156
bool IsValid() const
Definition Chunk.h:54
void ThermalStep(float fThermalDiffusivity, float fDeltaTime)
Definition Chunk.cpp:434
void UploadMesh()
Definition Chunk.cpp:371
std::vector< unsigned int > m_vec_uiIndices
Definition Chunk.h:180
Chunk(const Chunk &)=delete
const uint8_t * GetBlockData() const
Definition Chunk.h:55
uint8_t m_iBlocks[CHUNK_VOL]
Definition Chunk.h:197
size_t m_uiVertexCount
Definition Chunk.h:181
float GetTemperatureAt(int iX, int iY, int iZ) const
Definition Chunk.cpp:390
std::unique_ptr< Renderer::ThermalVolume > m_pThermalTex
Definition Chunk.h:191
int m_iChunkX
Definition Chunk.h:196
__m256i GetFlatIndexOf3DLayer_AVX2(__m256i vecX, __m256i vecY, __m256i vecZ) const
Definition Chunk.h:91
void SetBlockAt(int iX, int iY, int iZ, uint8_t uiBlockType)
Definition Chunk.cpp:148
bool m_bVonNeumannBC
Definition Chunk.h:198
Chunk & operator=(const Chunk &)=delete
void SetBlockData(const uint8_t *iBlocks)
Definition Chunk.h:147
std::vector< float > m_vec_fVertices
Definition Chunk.h:179
uint8_t GetBlockAt(int iX, int iY, int iZ) const
Gets a block ID. Handles boundary checks by querying neighbors.
Definition Chunk.h:107
int GetPaddedIndexOf3DLayer(int iX, int iY, int iZ) const
Definition Chunk.h:79
void SetNeighbours(Direction iDir, Chunk *pChunk)
Definition Chunk.h:66
void UpdateThermalTexture()
Definition Chunk.cpp:520
void ReconstructMesh(bool bEnableNeighborCulling=false)
Definition Chunk.cpp:224
Chunk * m_pNeighbours[6]
Definition Chunk.h:187
~Chunk()
Definition Chunk.cpp:34
void updateHeightData()
Definition Chunk.cpp:156
int m_iChunkZ
Definition Chunk.h:196
Renderer::IndexBuffer * m_pIBO
Definition Chunk.h:185
Renderer::VertexBuffer * m_pVBO
Definition Chunk.h:184
float * GetCurrData() const
Definition Chunk.h:166
AABB GetAABB() const
Generates the AABB for the entire chunk based on max height.
Definition Chunk.cpp:125
size_t m_uiTriangleCount
Definition Chunk.h:182
void updateBuffers()
Definition Chunk.cpp:189
float * m_pfNextFrameData
Definition Chunk.h:190
void addBlockFace(int iX, int iY, int iZ, FaceDirection iDir, int iBlockType)
Definition Chunk.cpp:268
int GetChunkZ() const
Definition Chunk.h:52
Definition IndexBuffer.h:6
Wrapper for OpenGL VAO (Vertex Array Object). Stores the configuration of vertex attributes (layout) ...
Definition VertexArray.h:13
Wrapper for OpenGL VBO (Vertex Buffer Object). Stores raw vertex data (positions, colors,...
Definition Buffer.h:11