From 424d00eaf7335e1c6427f40260d55782c3fd902c Mon Sep 17 00:00:00 2001 From: Mel Date: Fri, 30 Jun 2023 15:15:00 +0200 Subject: Avoid per-frame chunk copies and don't render block faces between chunks --- src/World/World.hpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/World/World.hpp') 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 = {}; + std::optional mesh_data = {}; std::optional mesh = {}; }; - std::vector get_visible_chunks(Vector<3> position); - Chunk* get_chunk_for_positon(Vector<3> position); + std::vector get_visible_chunks(Vector<3> position); + Chunk* get_chunk_for_position(Vector<3> position); private: std::unordered_set get_visible_chunk_indices(Vector<3> position) const; std::unordered_set 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 m_queue; Generator m_generator; std::unordered_map m_chunks; std::unordered_set m_visible_chunks; + + void try_to_create_mesh_for_chunk(ChunkData& data); }; } -- cgit 1.4.1