From 064b4516f299d3ba1f1d0d550ec6ee0167c6f5e2 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 17 May 2024 21:46:56 +0300 Subject: [PATCH] minor optimizations + MAX_WORK_PER_FRAME increased --- src/logic/ChunksController.cpp | 16 ++++---- src/voxels/Chunks.hpp | 74 +++++++++++++++++----------------- 2 files changed, 46 insertions(+), 44 deletions(-) diff --git a/src/logic/ChunksController.cpp b/src/logic/ChunksController.cpp index e633831d..1c039a14 100644 --- a/src/logic/ChunksController.cpp +++ b/src/logic/ChunksController.cpp @@ -19,15 +19,15 @@ #include #include -const uint MAX_WORK_PER_FRAME = 64; +const uint MAX_WORK_PER_FRAME = 128; const uint MIN_SURROUNDING = 9; ChunksController::ChunksController(Level* level, uint padding) - : level(level), - chunks(level->chunks.get()), - lighting(level->lighting.get()), - padding(padding), - generator(WorldGenerators::createGenerator(level->getWorld()->getGenerator(), level->content)) { + : level(level), + chunks(level->chunks.get()), + lighting(level->lighting.get()), + padding(padding), + generator(WorldGenerators::createGenerator(level->getWorld()->getGenerator(), level->content)) { } ChunksController::~ChunksController(){ @@ -59,7 +59,7 @@ bool ChunksController::loadVisible(){ for (uint z = padding; z < d-padding; z++){ for (uint x = padding; x < w-padding; x++){ int index = z * w + x; - auto chunk = chunks->chunks[index]; + auto& chunk = chunks->chunks[index]; if (chunk != nullptr){ if (chunk->isLoaded() && !chunk->isLighted()) { if (buildLights(chunk)) { @@ -79,7 +79,7 @@ bool ChunksController::loadVisible(){ } } - auto chunk = chunks->chunks[nearZ * w + nearX]; + const auto& chunk = chunks->chunks[nearZ * w + nearX]; if (chunk != nullptr) { return false; } diff --git a/src/voxels/Chunks.hpp b/src/voxels/Chunks.hpp index 429c8912..d2eb8cea 100644 --- a/src/voxels/Chunks.hpp +++ b/src/voxels/Chunks.hpp @@ -19,53 +19,55 @@ class LevelEvents; /* Player-centred chunks matrix */ class Chunks { - const ContentIndices* const contentIds; + const ContentIndices* const contentIds; public: - std::vector> chunks; - std::vector> chunksSecond; - size_t volume; - size_t chunksCount; - size_t visible = 0; - uint32_t w, d; - int32_t ox, oz; - WorldFiles* worldFiles; - LevelEvents* events; + std::vector> chunks; + std::vector> chunksSecond; + size_t volume; + size_t chunksCount; + size_t visible = 0; + uint32_t w, d; + int32_t ox, oz; + WorldFiles* worldFiles; + LevelEvents* events; - Chunks(uint32_t w, uint32_t d, int32_t ox, int32_t oz, - WorldFiles* worldFiles, LevelEvents* events, const Content* content); - ~Chunks() = default; + Chunks(uint32_t w, uint32_t d, int32_t ox, int32_t oz, + WorldFiles* worldFiles, LevelEvents* events, const Content* content); + ~Chunks() = default; - bool putChunk(std::shared_ptr chunk); + bool putChunk(std::shared_ptr chunk); - Chunk* getChunk(int32_t x, int32_t z); - Chunk* getChunkByVoxel(int32_t x, int32_t y, int32_t z); - voxel* get(int32_t x, int32_t y, int32_t z); - light_t getLight(int32_t x, int32_t y, int32_t z); - ubyte getLight(int32_t x, int32_t y, int32_t z, int channel); - void set(int32_t x, int32_t y, int32_t z, uint32_t id, uint8_t states); + Chunk* getChunk(int32_t x, int32_t z); + Chunk* getChunkByVoxel(int32_t x, int32_t y, int32_t z); + voxel* get(int32_t x, int32_t y, int32_t z); + light_t getLight(int32_t x, int32_t y, int32_t z); + ubyte getLight(int32_t x, int32_t y, int32_t z, int channel); + void set(int32_t x, int32_t y, int32_t z, uint32_t id, uint8_t states); - voxel* rayCast(glm::vec3 start, - glm::vec3 dir, - float maxLength, - glm::vec3& end, - glm::ivec3& norm, - glm::ivec3& iend); + voxel* rayCast( + glm::vec3 start, + glm::vec3 dir, + float maxLength, + glm::vec3& end, + glm::ivec3& norm, + glm::ivec3& iend + ); - glm::vec3 rayCastToObstacle(glm::vec3 start, glm::vec3 dir, float maxDist); + glm::vec3 rayCastToObstacle(glm::vec3 start, glm::vec3 dir, float maxDist); - const AABB* isObstacleAt(float x, float y, float z); + const AABB* isObstacleAt(float x, float y, float z); bool isSolidBlock(int32_t x, int32_t y, int32_t z); bool isReplaceableBlock(int32_t x, int32_t y, int32_t z); - bool isObstacleBlock(int32_t x, int32_t y, int32_t z); + bool isObstacleBlock(int32_t x, int32_t y, int32_t z); - // does not move chunks inside - void _setOffset(int32_t x, int32_t z); + // does not move chunks inside + void _setOffset(int32_t x, int32_t z); - void setCenter(int32_t x, int32_t z); - void translate(int32_t x, int32_t z); - void resize(uint32_t newW, uint32_t newD); + void setCenter(int32_t x, int32_t z); + void translate(int32_t x, int32_t z); + void resize(uint32_t newW, uint32_t newD); - void saveAndClear(); + void saveAndClear(); }; -#endif /* VOXELS_CHUNKS_HPP_ */ +#endif // VOXELS_CHUNKS_HPP_