fix rare grass-only chunk meshes
This commit is contained in:
parent
eb400e68ca
commit
cbbc04edcf
@ -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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
@ -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())
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user