diff --git a/ScuffedMinecraft/src/Chunk.cpp b/ScuffedMinecraft/src/Chunk.cpp index f40bfe5..2635bbd 100644 --- a/ScuffedMinecraft/src/Chunk.cpp +++ b/ScuffedMinecraft/src/Chunk.cpp @@ -79,31 +79,37 @@ void Chunk::GenerateChunkMesh() if (block->blockType == Block::BILLBOARD) { - billboardVertices.push_back(BillboardVertex(x + .85355f, y + 0, z + .85355f, block->sideMinX, block->sideMinY)); - billboardVertices.push_back(BillboardVertex(x + .14645f, y + 0, z + .14645f, block->sideMaxX, block->sideMinY)); - billboardVertices.push_back(BillboardVertex(x + .85355f, y + 1, z + .85355f, block->sideMinX, block->sideMaxY)); - billboardVertices.push_back(BillboardVertex(x + .14645f, y + 1, z + .14645f, block->sideMaxX, block->sideMaxY)); + // billboardVertices.push_back may reallocate memory and there were 8 different calls to that function + // Not only that increases the binary size, but that also increases the amount of memory reallocations + // the insert function reallocates the memory only onces and reduces the binary size significantly, as it's only 1 call + billboardVertices.insert(billboardVertices.end(), std::initializer_list<BillboardVertex>{ + BillboardVertex(x + .85355f, y + 0, z + .85355f, block->sideMinX, block->sideMinY), + BillboardVertex(x + .14645f, y + 0, z + .14645f, block->sideMaxX, block->sideMinY), + BillboardVertex(x + .85355f, y + 1, z + .85355f, block->sideMinX, block->sideMaxY), + BillboardVertex(x + .14645f, y + 1, z + .14645f, block->sideMaxX, block->sideMaxY), + BillboardVertex(x + .14645f, y + 0, z + .85355f, block->sideMinX, block->sideMinY), + BillboardVertex(x + .85355f, y + 0, z + .14645f, block->sideMaxX, block->sideMinY), + BillboardVertex(x + .14645f, y + 1, z + .85355f, block->sideMinX, block->sideMaxY), + BillboardVertex(x + .85355f, y + 1, z + .14645f, block->sideMaxX, block->sideMaxY) + }); - billboardIndices.push_back(currentBillboardVertex + 0); - billboardIndices.push_back(currentBillboardVertex + 3); - billboardIndices.push_back(currentBillboardVertex + 1); - billboardIndices.push_back(currentBillboardVertex + 0); - billboardIndices.push_back(currentBillboardVertex + 2); - billboardIndices.push_back(currentBillboardVertex + 3); - currentBillboardVertex += 4; + billboardIndices.insert(billboardIndices.end(), std::initializer_list<std::uint32_t>{ + currentBillboardVertex + 0, + currentBillboardVertex + 3, + currentBillboardVertex + 1, + currentBillboardVertex + 0, + currentBillboardVertex + 2, + currentBillboardVertex + 3, - billboardVertices.push_back(BillboardVertex(x + .14645f, y + 0, z + .85355f, block->sideMinX, block->sideMinY)); - billboardVertices.push_back(BillboardVertex(x + .85355f, y + 0, z + .14645f, block->sideMaxX, block->sideMinY)); - billboardVertices.push_back(BillboardVertex(x + .14645f, y + 1, z + .85355f, block->sideMinX, block->sideMaxY)); - billboardVertices.push_back(BillboardVertex(x + .85355f, y + 1, z + .14645f, block->sideMaxX, block->sideMaxY)); + currentBillboardVertex + 4 + 0, + currentBillboardVertex + 4 + 3, + currentBillboardVertex + 4 + 1, + currentBillboardVertex + 4 + 0, + currentBillboardVertex + 4 + 2, + currentBillboardVertex + 4 + 3 + }); - billboardIndices.push_back(currentBillboardVertex + 0); - billboardIndices.push_back(currentBillboardVertex + 3); - billboardIndices.push_back(currentBillboardVertex + 1); - billboardIndices.push_back(currentBillboardVertex + 0); - billboardIndices.push_back(currentBillboardVertex + 2); - billboardIndices.push_back(currentBillboardVertex + 3); - currentBillboardVertex += 4; + currentBillboardVertex += 8; } else { @@ -128,32 +134,42 @@ void Chunk::GenerateChunkMesh() { if (block->blockType == Block::LIQUID) { - waterVertices.push_back(WaterVertex(x + 1, y + 0, z + 0, block->sideMinX, block->sideMinY, 0, 0)); - waterVertices.push_back(WaterVertex(x + 0, y + 0, z + 0, block->sideMaxX, block->sideMinY, 0, 0)); - waterVertices.push_back(WaterVertex(x + 1, y + 1, z + 0, block->sideMinX, block->sideMaxY, 0, waterTopValue)); - waterVertices.push_back(WaterVertex(x + 0, y + 1, z + 0, block->sideMaxX, block->sideMaxY, 0, waterTopValue)); + waterVertices.insert(waterVertices.end(), std::initializer_list<WaterVertex>{ + WaterVertex(x + 1, y + 0, z + 0, block->sideMinX, block->sideMinY, 0, 0), + WaterVertex(x + 0, y + 0, z + 0, block->sideMaxX, block->sideMinY, 0, 0), + WaterVertex(x + 1, y + 1, z + 0, block->sideMinX, block->sideMaxY, 0, waterTopValue), + WaterVertex(x + 0, y + 1, z + 0, block->sideMaxX, block->sideMaxY, 0, waterTopValue) + }); + + waterIndices.insert(waterIndices.end(), std::initializer_list<std::uint32_t>{ + currentLiquidVertex + 0, + currentLiquidVertex + 3, + currentLiquidVertex + 1, + currentLiquidVertex + 0, + currentLiquidVertex + 2, + currentLiquidVertex + 3 + }); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 3); - waterIndices.push_back(currentLiquidVertex + 1); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 2); - waterIndices.push_back(currentLiquidVertex + 3); currentLiquidVertex += 4; } else { - mainVertices.push_back(Vertex(x + 1, y + 0, z + 0, block->sideMinX, block->sideMinY, 0)); - mainVertices.push_back(Vertex(x + 0, y + 0, z + 0, block->sideMaxX, block->sideMinY, 0)); - mainVertices.push_back(Vertex(x + 1, y + 1, z + 0, block->sideMinX, block->sideMaxY, 0)); - mainVertices.push_back(Vertex(x + 0, y + 1, z + 0, block->sideMaxX, block->sideMaxY, 0)); + mainVertices.insert(mainVertices.end(), std::initializer_list<Vertex>{ + Vertex(x + 1, y + 0, z + 0, block->sideMinX, block->sideMinY, 0), + Vertex(x + 0, y + 0, z + 0, block->sideMaxX, block->sideMinY, 0), + Vertex(x + 1, y + 1, z + 0, block->sideMinX, block->sideMaxY, 0), + Vertex(x + 0, y + 1, z + 0, block->sideMaxX, block->sideMaxY, 0) + }); + + mainIndices.insert(mainIndices.end(), std::initializer_list<std::uint32_t>{ + currentVertex + 0, + currentVertex + 3, + currentVertex + 1, + currentVertex + 0, + currentVertex + 2, + currentVertex + 3 + }); - mainIndices.push_back(currentVertex + 0); - mainIndices.push_back(currentVertex + 3); - mainIndices.push_back(currentVertex + 1); - mainIndices.push_back(currentVertex + 0); - mainIndices.push_back(currentVertex + 2); - mainIndices.push_back(currentVertex + 3); currentVertex += 4; } } @@ -180,32 +196,42 @@ void Chunk::GenerateChunkMesh() { if (block->blockType == Block::LIQUID) { - waterVertices.push_back(WaterVertex(x + 0, y + 0, z + 1, block->sideMinX, block->sideMinY, 1, 0)); - waterVertices.push_back(WaterVertex(x + 1, y + 0, z + 1, block->sideMaxX, block->sideMinY, 1, 0)); - waterVertices.push_back(WaterVertex(x + 0, y + 1, z + 1, block->sideMinX, block->sideMaxY, 1, waterTopValue)); - waterVertices.push_back(WaterVertex(x + 1, y + 1, z + 1, block->sideMaxX, block->sideMaxY, 1, waterTopValue)); + waterVertices.insert(waterVertices.end(), std::initializer_list<WaterVertex>{ + WaterVertex(x + 0, y + 0, z + 1, block->sideMinX, block->sideMinY, 1, 0), + WaterVertex(x + 1, y + 0, z + 1, block->sideMaxX, block->sideMinY, 1, 0), + WaterVertex(x + 0, y + 1, z + 1, block->sideMinX, block->sideMaxY, 1, waterTopValue), + WaterVertex(x + 1, y + 1, z + 1, block->sideMaxX, block->sideMaxY, 1, waterTopValue) + }); + + waterIndices.insert(waterIndices.end(), std::initializer_list<std::uint32_t>{ + currentLiquidVertex + 0, + currentLiquidVertex + 3, + currentLiquidVertex + 1, + currentLiquidVertex + 0, + currentLiquidVertex + 2, + currentLiquidVertex + 3 + }); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 3); - waterIndices.push_back(currentLiquidVertex + 1); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 2); - waterIndices.push_back(currentLiquidVertex + 3); currentLiquidVertex += 4; } else { - mainVertices.push_back(Vertex(x + 0, y + 0, z + 1, block->sideMinX, block->sideMinY, 1)); - mainVertices.push_back(Vertex(x + 1, y + 0, z + 1, block->sideMaxX, block->sideMinY, 1)); - mainVertices.push_back(Vertex(x + 0, y + 1, z + 1, block->sideMinX, block->sideMaxY, 1)); - mainVertices.push_back(Vertex(x + 1, y + 1, z + 1, block->sideMaxX, block->sideMaxY, 1)); + mainVertices.insert(mainVertices.end(), std::initializer_list<Vertex>{ + Vertex(x + 0, y + 0, z + 1, block->sideMinX, block->sideMinY, 1), + Vertex(x + 1, y + 0, z + 1, block->sideMaxX, block->sideMinY, 1), + Vertex(x + 0, y + 1, z + 1, block->sideMinX, block->sideMaxY, 1), + Vertex(x + 1, y + 1, z + 1, block->sideMaxX, block->sideMaxY, 1) + }); + + mainIndices.insert(mainIndices.end(), std::initializer_list<std::uint32_t>{ + currentVertex + 0, + currentVertex + 3, + currentVertex + 1, + currentVertex + 0, + currentVertex + 2, + currentVertex + 3 + }); - mainIndices.push_back(currentVertex + 0); - mainIndices.push_back(currentVertex + 3); - mainIndices.push_back(currentVertex + 1); - mainIndices.push_back(currentVertex + 0); - mainIndices.push_back(currentVertex + 2); - mainIndices.push_back(currentVertex + 3); currentVertex += 4; } } @@ -232,32 +258,42 @@ void Chunk::GenerateChunkMesh() { if (block->blockType == Block::LIQUID) { - waterVertices.push_back(WaterVertex(x + 0, y + 0, z + 0, block->sideMinX, block->sideMinY, 2, 0)); - waterVertices.push_back(WaterVertex(x + 0, y + 0, z + 1, block->sideMaxX, block->sideMinY, 2, 0)); - waterVertices.push_back(WaterVertex(x + 0, y + 1, z + 0, block->sideMinX, block->sideMaxY, 2, waterTopValue)); - waterVertices.push_back(WaterVertex(x + 0, y + 1, z + 1, block->sideMaxX, block->sideMaxY, 2, waterTopValue)); + waterVertices.insert(waterVertices.end(), std::initializer_list<WaterVertex>{ + WaterVertex(x + 0, y + 0, z + 0, block->sideMinX, block->sideMinY, 2, 0), + WaterVertex(x + 0, y + 0, z + 1, block->sideMaxX, block->sideMinY, 2, 0), + WaterVertex(x + 0, y + 1, z + 0, block->sideMinX, block->sideMaxY, 2, waterTopValue), + WaterVertex(x + 0, y + 1, z + 1, block->sideMaxX, block->sideMaxY, 2, waterTopValue) + }); + + waterIndices.insert(waterIndices.end(), std::initializer_list<std::uint32_t>{ + currentLiquidVertex + 0, + currentLiquidVertex + 3, + currentLiquidVertex + 1, + currentLiquidVertex + 0, + currentLiquidVertex + 2, + currentLiquidVertex + 3 + }); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 3); - waterIndices.push_back(currentLiquidVertex + 1); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 2); - waterIndices.push_back(currentLiquidVertex + 3); currentLiquidVertex += 4; } else { - mainVertices.push_back(Vertex(x + 0, y + 0, z + 0, block->sideMinX, block->sideMinY, 2)); - mainVertices.push_back(Vertex(x + 0, y + 0, z + 1, block->sideMaxX, block->sideMinY, 2)); - mainVertices.push_back(Vertex(x + 0, y + 1, z + 0, block->sideMinX, block->sideMaxY, 2)); - mainVertices.push_back(Vertex(x + 0, y + 1, z + 1, block->sideMaxX, block->sideMaxY, 2)); + mainVertices.insert(mainVertices.end(), std::initializer_list<Vertex>{ + Vertex(x + 0, y + 0, z + 0, block->sideMinX, block->sideMinY, 2), + Vertex(x + 0, y + 0, z + 1, block->sideMaxX, block->sideMinY, 2), + Vertex(x + 0, y + 1, z + 0, block->sideMinX, block->sideMaxY, 2), + Vertex(x + 0, y + 1, z + 1, block->sideMaxX, block->sideMaxY, 2) + }); + + mainIndices.insert(mainIndices.end(), std::initializer_list<std::uint32_t>{ + currentVertex + 0, + currentVertex + 3, + currentVertex + 1, + currentVertex + 0, + currentVertex + 2, + currentVertex + 3 + }); - mainIndices.push_back(currentVertex + 0); - mainIndices.push_back(currentVertex + 3); - mainIndices.push_back(currentVertex + 1); - mainIndices.push_back(currentVertex + 0); - mainIndices.push_back(currentVertex + 2); - mainIndices.push_back(currentVertex + 3); currentVertex += 4; } } @@ -284,32 +320,42 @@ void Chunk::GenerateChunkMesh() { if (block->blockType == Block::LIQUID) { - waterVertices.push_back(WaterVertex(x + 1, y + 0, z + 1, block->sideMinX, block->sideMinY, 3, 0)); - waterVertices.push_back(WaterVertex(x + 1, y + 0, z + 0, block->sideMaxX, block->sideMinY, 3, 0)); - waterVertices.push_back(WaterVertex(x + 1, y + 1, z + 1, block->sideMinX, block->sideMaxY, 3, waterTopValue)); - waterVertices.push_back(WaterVertex(x + 1, y + 1, z + 0, block->sideMaxX, block->sideMaxY, 3, waterTopValue)); + waterVertices.insert(waterVertices.end(), std::initializer_list<WaterVertex>{ + WaterVertex(x + 1, y + 0, z + 1, block->sideMinX, block->sideMinY, 3, 0), + WaterVertex(x + 1, y + 0, z + 0, block->sideMaxX, block->sideMinY, 3, 0), + WaterVertex(x + 1, y + 1, z + 1, block->sideMinX, block->sideMaxY, 3, waterTopValue), + WaterVertex(x + 1, y + 1, z + 0, block->sideMaxX, block->sideMaxY, 3, waterTopValue) + }); + + waterIndices.insert(waterIndices.end(), std::initializer_list<std::uint32_t>{ + currentLiquidVertex + 0, + currentLiquidVertex + 3, + currentLiquidVertex + 1, + currentLiquidVertex + 0, + currentLiquidVertex + 2, + currentLiquidVertex + 3 + }); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 3); - waterIndices.push_back(currentLiquidVertex + 1); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 2); - waterIndices.push_back(currentLiquidVertex + 3); currentLiquidVertex += 4; } else { - mainVertices.push_back(Vertex(x + 1, y + 0, z + 1, block->sideMinX, block->sideMinY, 3)); - mainVertices.push_back(Vertex(x + 1, y + 0, z + 0, block->sideMaxX, block->sideMinY, 3)); - mainVertices.push_back(Vertex(x + 1, y + 1, z + 1, block->sideMinX, block->sideMaxY, 3)); - mainVertices.push_back(Vertex(x + 1, y + 1, z + 0, block->sideMaxX, block->sideMaxY, 3)); + mainVertices.insert(mainVertices.end(), std::initializer_list<Vertex>{ + Vertex(x + 1, y + 0, z + 1, block->sideMinX, block->sideMinY, 3), + Vertex(x + 1, y + 0, z + 0, block->sideMaxX, block->sideMinY, 3), + Vertex(x + 1, y + 1, z + 1, block->sideMinX, block->sideMaxY, 3), + Vertex(x + 1, y + 1, z + 0, block->sideMaxX, block->sideMaxY, 3) + }); + + mainIndices.insert(mainIndices.end(), std::initializer_list<std::uint32_t>{ + currentVertex + 0, + currentVertex + 3, + currentVertex + 1, + currentVertex + 0, + currentVertex + 2, + currentVertex + 3 + }); - mainIndices.push_back(currentVertex + 0); - mainIndices.push_back(currentVertex + 3); - mainIndices.push_back(currentVertex + 1); - mainIndices.push_back(currentVertex + 0); - mainIndices.push_back(currentVertex + 2); - mainIndices.push_back(currentVertex + 3); currentVertex += 4; } } @@ -337,32 +383,42 @@ void Chunk::GenerateChunkMesh() { if (block->blockType == Block::LIQUID) { - waterVertices.push_back(WaterVertex(x + 1, y + 0, z + 1, block->bottomMinX, block->bottomMinY, 4, 0)); - waterVertices.push_back(WaterVertex(x + 0, y + 0, z + 1, block->bottomMaxX, block->bottomMinY, 4, 0)); - waterVertices.push_back(WaterVertex(x + 1, y + 0, z + 0, block->bottomMinX, block->bottomMaxY, 4, 0)); - waterVertices.push_back(WaterVertex(x + 0, y + 0, z + 0, block->bottomMaxX, block->bottomMaxY, 4, 0)); + waterVertices.insert(waterVertices.end(), std::initializer_list<WaterVertex>{ + WaterVertex(x + 1, y + 0, z + 1, block->bottomMinX, block->bottomMinY, 4, 0), + WaterVertex(x + 0, y + 0, z + 1, block->bottomMaxX, block->bottomMinY, 4, 0), + WaterVertex(x + 1, y + 0, z + 0, block->bottomMinX, block->bottomMaxY, 4, 0), + WaterVertex(x + 0, y + 0, z + 0, block->bottomMaxX, block->bottomMaxY, 4, 0) + }); + + waterIndices.insert(waterIndices.end(), std::initializer_list<std::uint32_t>{ + currentLiquidVertex + 0, + currentLiquidVertex + 3, + currentLiquidVertex + 1, + currentLiquidVertex + 0, + currentLiquidVertex + 2, + currentLiquidVertex + 3 + }); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 3); - waterIndices.push_back(currentLiquidVertex + 1); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 2); - waterIndices.push_back(currentLiquidVertex + 3); currentLiquidVertex += 4; } else { - mainVertices.push_back(Vertex(x + 1, y + 0, z + 1, block->bottomMinX, block->bottomMinY, 4)); - mainVertices.push_back(Vertex(x + 0, y + 0, z + 1, block->bottomMaxX, block->bottomMinY, 4)); - mainVertices.push_back(Vertex(x + 1, y + 0, z + 0, block->bottomMinX, block->bottomMaxY, 4)); - mainVertices.push_back(Vertex(x + 0, y + 0, z + 0, block->bottomMaxX, block->bottomMaxY, 4)); + mainVertices.insert(mainVertices.end(), std::initializer_list<Vertex>{ + Vertex(x + 1, y + 0, z + 1, block->bottomMinX, block->bottomMinY, 4), + Vertex(x + 0, y + 0, z + 1, block->bottomMaxX, block->bottomMinY, 4), + Vertex(x + 1, y + 0, z + 0, block->bottomMinX, block->bottomMaxY, 4), + Vertex(x + 0, y + 0, z + 0, block->bottomMaxX, block->bottomMaxY, 4) + }); + + mainIndices.insert(mainIndices.end(), std::initializer_list<std::uint32_t>{ + currentVertex + 0, + currentVertex + 3, + currentVertex + 1, + currentVertex + 0, + currentVertex + 2, + currentVertex + 3 + }); - mainIndices.push_back(currentVertex + 0); - mainIndices.push_back(currentVertex + 3); - mainIndices.push_back(currentVertex + 1); - mainIndices.push_back(currentVertex + 0); - mainIndices.push_back(currentVertex + 2); - mainIndices.push_back(currentVertex + 3); currentVertex += 4; } } @@ -374,31 +430,34 @@ void Chunk::GenerateChunkMesh() { if (topBlockType->blockType != Block::LIQUID) { - waterVertices.push_back(WaterVertex(x + 0, y + 1, z + 1, block->topMinX, block->topMinY, 5, 1)); - waterVertices.push_back(WaterVertex(x + 1, y + 1, z + 1, block->topMaxX, block->topMinY, 5, 1)); - waterVertices.push_back(WaterVertex(x + 0, y + 1, z + 0, block->topMinX, block->topMaxY, 5, 1)); - waterVertices.push_back(WaterVertex(x + 1, y + 1, z + 0, block->topMaxX, block->topMaxY, 5, 1)); + waterVertices.insert(waterVertices.end(), std::initializer_list<WaterVertex>{ + WaterVertex(x + 0, y + 1, z + 1, block->topMinX, block->topMinY, 5, 1), + WaterVertex(x + 1, y + 1, z + 1, block->topMaxX, block->topMinY, 5, 1), + WaterVertex(x + 0, y + 1, z + 0, block->topMinX, block->topMaxY, 5, 1), + WaterVertex(x + 1, y + 1, z + 0, block->topMaxX, block->topMaxY, 5, 1), + WaterVertex(x + 1, y + 1, z + 1, block->topMinX, block->topMinY, 5, 1), + WaterVertex(x + 0, y + 1, z + 1, block->topMaxX, block->topMinY, 5, 1), + WaterVertex(x + 1, y + 1, z + 0, block->topMinX, block->topMaxY, 5, 1), + WaterVertex(x + 0, y + 1, z + 0, block->topMaxX, block->topMaxY, 5, 1) + }); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 3); - waterIndices.push_back(currentLiquidVertex + 1); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 2); - waterIndices.push_back(currentLiquidVertex + 3); - currentLiquidVertex += 4; + waterIndices.insert(waterIndices.end(), std::initializer_list<std::uint32_t>{ + currentLiquidVertex + 0, + currentLiquidVertex + 3, + currentLiquidVertex + 1, + currentLiquidVertex + 0, + currentLiquidVertex + 2, + currentLiquidVertex + 3, - waterVertices.push_back(WaterVertex(x + 1, y + 1, z + 1, block->topMinX, block->topMinY, 5, 1)); - waterVertices.push_back(WaterVertex(x + 0, y + 1, z + 1, block->topMaxX, block->topMinY, 5, 1)); - waterVertices.push_back(WaterVertex(x + 1, y + 1, z + 0, block->topMinX, block->topMaxY, 5, 1)); - waterVertices.push_back(WaterVertex(x + 0, y + 1, z + 0, block->topMaxX, block->topMaxY, 5, 1)); + currentLiquidVertex + 4 + 0, + currentLiquidVertex + 4 + 3, + currentLiquidVertex + 4 + 1, + currentLiquidVertex + 4 + 0, + currentLiquidVertex + 4 + 2, + currentLiquidVertex + 4 + 3 + }); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 3); - waterIndices.push_back(currentLiquidVertex + 1); - waterIndices.push_back(currentLiquidVertex + 0); - waterIndices.push_back(currentLiquidVertex + 2); - waterIndices.push_back(currentLiquidVertex + 3); - currentLiquidVertex += 4; + currentLiquidVertex += 8; } } else if (topBlockType->blockType == Block::LEAVES @@ -406,17 +465,22 @@ void Chunk::GenerateChunkMesh() || topBlockType->blockType == Block::BILLBOARD || topBlockType->blockType == Block::LIQUID) { - mainVertices.push_back(Vertex(x + 0, y + 1, z + 1, block->topMinX, block->topMinY, 5)); - mainVertices.push_back(Vertex(x + 1, y + 1, z + 1, block->topMaxX, block->topMinY, 5)); - mainVertices.push_back(Vertex(x + 0, y + 1, z + 0, block->topMinX, block->topMaxY, 5)); - mainVertices.push_back(Vertex(x + 1, y + 1, z + 0, block->topMaxX, block->topMaxY, 5)); + mainVertices.insert(mainVertices.end(), std::initializer_list<Vertex>{ + Vertex(x + 0, y + 1, z + 1, block->topMinX, block->topMinY, 5), + Vertex(x + 1, y + 1, z + 1, block->topMaxX, block->topMinY, 5), + Vertex(x + 0, y + 1, z + 0, block->topMinX, block->topMaxY, 5), + Vertex(x + 1, y + 1, z + 0, block->topMaxX, block->topMaxY, 5) + }); + + mainIndices.insert(mainIndices.end(), std::initializer_list<std::uint32_t>{ + currentVertex + 0, + currentVertex + 3, + currentVertex + 1, + currentVertex + 0, + currentVertex + 2, + currentVertex + 3 + }); - mainIndices.push_back(currentVertex + 0); - mainIndices.push_back(currentVertex + 3); - mainIndices.push_back(currentVertex + 1); - mainIndices.push_back(currentVertex + 0); - mainIndices.push_back(currentVertex + 2); - mainIndices.push_back(currentVertex + 3); currentVertex += 4; } } diff --git a/ScuffedMinecraft/src/Vertex.h b/ScuffedMinecraft/src/Vertex.h index 4dc83bc..07904f1 100644 --- a/ScuffedMinecraft/src/Vertex.h +++ b/ScuffedMinecraft/src/Vertex.h @@ -55,4 +55,9 @@ struct BillboardVertex texGridX = _texGridX; texGridY = _texGridY; } + + BillboardVertex(const BillboardVertex&) = default; + BillboardVertex(BillboardVertex&&) noexcept = default; + + BillboardVertex& operator=(const BillboardVertex&) = default; }; \ No newline at end of file