fix rare grass-only chunk meshes

This commit is contained in:
MihailRis 2024-10-24 09:19:58 +03:00
parent eb400e68ca
commit cbbc04edcf
3 changed files with 15 additions and 1 deletions

View File

@ -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);
}

View File

@ -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<VoxelsVolume> voxelsBuffer;
@ -149,4 +150,8 @@ public:
std::shared_ptr<Mesh> render(const Chunk* chunk, const ChunksStorage* chunks);
std::shared_ptr<Mesh> createMesh();
VoxelsVolume* getVoxelsBuffer() const;
bool isCancelled() const {
return cancelled;
}
};

View File

@ -40,7 +40,9 @@ ChunksRenderer::ChunksRenderer(
"chunks-render-pool",
[=](){return std::make_shared<RendererWorker>(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())
{