diff options
| author | Mel <einebeere@gmail.com> | 2023-06-30 15:15:00 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2023-06-30 15:15:00 +0200 |
| commit | 424d00eaf7335e1c6427f40260d55782c3fd902c (patch) | |
| tree | 62550b085078d84c8a48cbb01f4f7738bfeeb3da /src/World/World.hpp | |
| parent | 6d61b17c4289185d59d37caae8070a40e91fba40 (diff) | |
| download | meowcraft-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.hpp | 12 |
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); }; } |
