From aadb04c41eb4caae8f611da3cf1a895d38550403 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 12 Nov 2024 20:07:45 +0300 Subject: [PATCH] minor optimize BlocksRenderer --- src/graphics/render/BlocksRenderer.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/graphics/render/BlocksRenderer.cpp b/src/graphics/render/BlocksRenderer.cpp index cd20249d..745e96ec 100644 --- a/src/graphics/render/BlocksRenderer.cpp +++ b/src/graphics/render/BlocksRenderer.cpp @@ -434,10 +434,27 @@ glm::vec4 BlocksRenderer::pickSoftLight( } void BlocksRenderer::render(const voxel* voxels) { - int begin = chunk->bottom * (CHUNK_W * CHUNK_D); - int end = chunk->top * (CHUNK_W * CHUNK_D); + int totalBegin = chunk->bottom * (CHUNK_W * CHUNK_D); + int totalEnd = chunk->top * (CHUNK_W * CHUNK_D); + + int beginEnds[256][2] {}; + for (int i = totalBegin; i < totalEnd; i++) { + const voxel& vox = voxels[i]; + blockid_t id = vox.id; + const auto& def = *blockDefsCache[id]; + + if (beginEnds[def.drawGroup][0] == 0) { + beginEnds[def.drawGroup][0] = i+1; + } + beginEnds[def.drawGroup][1] = i; + } for (const auto drawGroup : *content->drawGroups) { - for (int i = begin; i < end; i++) { + int begin = beginEnds[drawGroup][0]; + if (begin == 0) { + continue; + } + int end = beginEnds[drawGroup][1]; + for (int i = begin-1; i <= end; i++) { const voxel& vox = voxels[i]; blockid_t id = vox.id; blockstate state = vox.state;