- int idx = 0;
- BlockModel::Index vtx_counter = 0;
- for (size_t z = 0; z < depth; ++z) {
- for (size_t y = 0; y < height; ++y) {
- for (size_t x = 0; x < width; ++x, ++idx) {
- const BlockType &type = Type(BlockAt(idx));
- const Pos pos(x, y, z);
-
- if (!type.visible || Obstructed(pos).All()) continue;
-
- type.FillBlockModel(buf, ToTransform(pos, idx), vtx_counter);
- size_t vtx_begin = vtx_counter;
- vtx_counter += type.shape->VertexCount();
-
- for (size_t vtx = vtx_begin; vtx < vtx_counter; ++vtx) {
- buf.lights.emplace_back(GetVertexLight(
- pos,
- buf.vertices[vtx],
- type.shape->VertexNormal(vtx - vtx_begin, BlockAt(idx).Transform())
- ));
+ if (idx_count > 0) {
+ int idx = 0;
+ BlockMesh::Index vtx_counter = 0;
+ for (size_t z = 0; z < depth; ++z) {
+ for (size_t y = 0; y < height; ++y) {
+ for (size_t x = 0; x < width; ++x, ++idx) {
+ const BlockType &type = Type(BlockAt(idx));
+ const Pos pos(x, y, z);
+
+ if (!type.visible || !type.shape || Obstructed(pos).All()) continue;
+
+ type.FillBlockMesh(buf, ToTransform(pos, idx), vtx_counter);
+ size_t vtx_begin = vtx_counter;
+ vtx_counter += type.shape->VertexCount();
+
+ for (size_t vtx = vtx_begin; vtx < vtx_counter; ++vtx) {
+ buf.lights.emplace_back(GetVertexLight(
+ pos,
+ buf.vertices[vtx],
+ type.shape->VertexNormal(vtx - vtx_begin, BlockAt(idx).Transform())
+ ));
+ }