diff --git a/src/graphics/render/BlocksRenderer.cpp b/src/graphics/render/BlocksRenderer.cpp index 38ac7f4c..e457fb69 100644 --- a/src/graphics/render/BlocksRenderer.cpp +++ b/src/graphics/render/BlocksRenderer.cpp @@ -520,6 +520,13 @@ void BlocksRenderer::build(const Chunk* chunk, const ChunksStorage* chunks) { overflow = false; vertexOffset = 0; indexOffset = indexSize = 0; + if (voxelsBuffer->pickBlockId( + chunk->x * CHUNK_W, 0, chunk->z * CHUNK_D + ) == BLOCK_VOID) { + cancelled = true; + return; + } + cancelled = false; const voxel* voxels = chunk->voxels; render(voxels); } diff --git a/src/graphics/render/BlocksRenderer.hpp b/src/graphics/render/BlocksRenderer.hpp index 73ac02e2..e0da218c 100644 --- a/src/graphics/render/BlocksRenderer.hpp +++ b/src/graphics/render/BlocksRenderer.hpp @@ -33,6 +33,7 @@ class BlocksRenderer { size_t capacity; int voxelBufferPadding = 2; bool overflow = false; + bool cancelled = false; const Chunk* chunk = nullptr; std::unique_ptr voxelsBuffer; @@ -149,4 +150,8 @@ public: std::shared_ptr render(const Chunk* chunk, const ChunksStorage* chunks); std::shared_ptr createMesh(); VoxelsVolume* getVoxelsBuffer() const; + + bool isCancelled() const { + return cancelled; + } }; diff --git a/src/graphics/render/ChunksRenderer.cpp b/src/graphics/render/ChunksRenderer.cpp index c79791df..04bcb548 100644 --- a/src/graphics/render/ChunksRenderer.cpp +++ b/src/graphics/render/ChunksRenderer.cpp @@ -40,7 +40,9 @@ ChunksRenderer::ChunksRenderer( "chunks-render-pool", [=](){return std::make_shared(level, cache, settings);}, [=](RendererResult& mesh){ - meshes[mesh.key] = mesh.renderer->createMesh(); + if (!mesh.renderer->isCancelled()) { + meshes[mesh.key] = mesh.renderer->createMesh(); + } inwork.erase(mesh.key); }, settings->graphics.chunkMaxRenderers.get()) {