Compare commits

..

2 Commits

Author SHA1 Message Date
0x01FE
de39d10776 update readme and remove a debug 2025-11-19 22:06:57 -06:00
0x01FE
57d749f09b fixed FPS issues (turns out you shouldn't look at 32768 * 16 voxels every frame 2025-11-19 22:04:05 -06:00
3 changed files with 18 additions and 4 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@ -47,3 +47,9 @@ It took me a couple of days to fix the ray casting. I forgot that my mesh is off
Woah! The camera doesn't just phase through placed blocks anymore! The camera can also fall into the void for eternity! So cool!
![The camera, sitting atop a built platform, overlooking another "Hi" built from stone](.attachments/physics.png)
## 0.8.0 : Data Structure Redo - 11/19/25
Final part of the blog post tutorial. Changing the data structure of the Chunk's to store voxels in a 1d array instead of a HashMap.
![Hi written on a dirt plane in stone.](.attachments/data-structure-redo.png)

View File

@ -59,25 +59,33 @@ class Chunk {
// Mutators
inline void set(int x, int y, int z, VoxelKind v) {
data[index(x, y, z)] = v;
empty_checked = false; // Invalidate cache
}
inline void set(glm::ivec3 pos, VoxelKind v) {
// std::cout << "Setting Pos (" << pos.x << ", " << pos.y << ", " << pos.z << ")" << std::endl;
data[index(pos.x, pos.y, pos.z)] = v;
empty_checked = false; // Invalidate cache
}
// Other
inline bool isEmpty() const {
return std::all_of(data.begin(), data.end(), [](VoxelKind k){
if (!empty_checked) {
is_empty = std::all_of(data.begin(), data.end(), [](VoxelKind k){
return k == VoxelKind::Air;
});
empty_checked = true;
}
return is_empty;
}
private:
static constexpr int SIZE = CHUNK_SIZE;
static constexpr int TOTAL = SIZE * SIZE * SIZE;
std::array<VoxelKind, TOTAL + 1> data;
std::array<VoxelKind, TOTAL> data;
std::unique_ptr<Mesh> mesh; // Nullable mesh
mutable bool is_empty = true; // Cache empty state
mutable bool empty_checked = false; // Track if we've checked
static inline constexpr int index(int x, int y, int z) noexcept {
return x + (y * SIZE) + (z * SIZE * SIZE);