fix rare grass-only chunk meshes
This commit is contained in:
@@ -520,6 +520,13 @@ void BlocksRenderer::build(const Chunk* chunk, const ChunksStorage* chunks) {
|
|||||||
overflow = false;
|
overflow = false;
|
||||||
vertexOffset = 0;
|
vertexOffset = 0;
|
||||||
indexOffset = indexSize = 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;
|
const voxel* voxels = chunk->voxels;
|
||||||
render(voxels);
|
render(voxels);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ class BlocksRenderer {
|
|||||||
size_t capacity;
|
size_t capacity;
|
||||||
int voxelBufferPadding = 2;
|
int voxelBufferPadding = 2;
|
||||||
bool overflow = false;
|
bool overflow = false;
|
||||||
|
bool cancelled = false;
|
||||||
const Chunk* chunk = nullptr;
|
const Chunk* chunk = nullptr;
|
||||||
std::unique_ptr<VoxelsVolume> voxelsBuffer;
|
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> render(const Chunk* chunk, const ChunksStorage* chunks);
|
||||||
std::shared_ptr<Mesh> createMesh();
|
std::shared_ptr<Mesh> createMesh();
|
||||||
VoxelsVolume* getVoxelsBuffer() const;
|
VoxelsVolume* getVoxelsBuffer() const;
|
||||||
|
|
||||||
|
bool isCancelled() const {
|
||||||
|
return cancelled;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -40,7 +40,9 @@ ChunksRenderer::ChunksRenderer(
|
|||||||
"chunks-render-pool",
|
"chunks-render-pool",
|
||||||
[=](){return std::make_shared<RendererWorker>(level, cache, settings);},
|
[=](){return std::make_shared<RendererWorker>(level, cache, settings);},
|
||||||
[=](RendererResult& mesh){
|
[=](RendererResult& mesh){
|
||||||
meshes[mesh.key] = mesh.renderer->createMesh();
|
if (!mesh.renderer->isCancelled()) {
|
||||||
|
meshes[mesh.key] = mesh.renderer->createMesh();
|
||||||
|
}
|
||||||
inwork.erase(mesh.key);
|
inwork.erase(mesh.key);
|
||||||
}, settings->graphics.chunkMaxRenderers.get())
|
}, settings->graphics.chunkMaxRenderers.get())
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user