summary refs log tree commit diff
path: root/src/World/World.hpp
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2023-06-30 15:15:00 +0200
committerMel <einebeere@gmail.com>2023-06-30 15:15:00 +0200
commit424d00eaf7335e1c6427f40260d55782c3fd902c (patch)
tree62550b085078d84c8a48cbb01f4f7738bfeeb3da /src/World/World.hpp
parent6d61b17c4289185d59d37caae8070a40e91fba40 (diff)
downloadmeowcraft-424d00eaf7335e1c6427f40260d55782c3fd902c.tar.zst
meowcraft-424d00eaf7335e1c6427f40260d55782c3fd902c.zip
Avoid per-frame chunk copies and don't render block faces between chunks
Diffstat (limited to 'src/World/World.hpp')
-rw-r--r--src/World/World.hpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/World/World.hpp b/src/World/World.hpp
index a5f73ec..03ed517 100644
--- a/src/World/World.hpp
+++ b/src/World/World.hpp
@@ -12,11 +12,12 @@ namespace MC::World {
 
 class World {
 public:
-    World() : m_queue(8), m_chunks(), m_visible_chunks() {}
+    World() : m_queue(8) {}
 
     enum class ChunkStatus {
         Empty,
         WaitingForGeneration,
+        NeedsMesh,
         Done
     };
 
@@ -24,11 +25,12 @@ public:
         ChunkIndex index;
         ChunkStatus status;
         std::optional<Chunk> chunk = {};
+        std::optional<GFX::Mesh> mesh_data = {};
         std::optional<GFX::BindableMesh> mesh = {};
     };
 
-    std::vector<ChunkData> get_visible_chunks(Vector<3> position);
-    Chunk* get_chunk_for_positon(Vector<3> position);
+    std::vector<ChunkData*> get_visible_chunks(Vector<3> position);
+    Chunk* get_chunk_for_position(Vector<3> position);
 private:
     std::unordered_set<ChunkIndex> get_visible_chunk_indices(Vector<3> position) const;
     std::unordered_set<ChunkIndex> load_finished_chunks_from_queue();
@@ -37,13 +39,15 @@ private:
 
     ChunkData& get(ChunkIndex index);
 
-    uint8_t m_view_distance_radius = 12;
+    uint8_t m_view_distance_radius = 13;
 
     Compute::Queue<Chunk, ChunkIndex> m_queue;
     Generator m_generator;
 
     std::unordered_map<ChunkIndex, ChunkData> m_chunks;
     std::unordered_set<ChunkIndex> m_visible_chunks;
+
+    void try_to_create_mesh_for_chunk(ChunkData& data);
 };
 
 }