feat: multiple index buffers per mesh support

This commit is contained in:
MihailRis
2025-07-24 21:40:00 +03:00
parent 6debc92ae5
commit 4a6ccf4847
7 changed files with 81 additions and 43 deletions
+4 -2
View File
@@ -706,6 +706,7 @@ void BlocksRenderer::build(const Chunk* chunk, const Chunks* chunks) {
vertexCount = 0;
vertexOffset = 0;
indexCount = 0;
denseRender = settings.graphics.denseRender.get();
render(voxels, beginEnds);
}
@@ -714,7 +715,7 @@ ChunkMeshData BlocksRenderer::createMesh() {
return ChunkMeshData{
MeshData(
util::Buffer(vertexBuffer.get(), vertexCount),
util::Buffer(indexBuffer.get(), indexCount),
std::vector<util::Buffer<uint32_t>> {util::Buffer(indexBuffer.get(), indexCount)},
util::Buffer(
ChunkVertex::ATTRIBUTES, sizeof(ChunkVertex::ATTRIBUTES) / sizeof(VertexAttribute)
)
@@ -727,7 +728,8 @@ ChunkMesh BlocksRenderer::render(const Chunk *chunk, const Chunks *chunks) {
build(chunk, chunks);
return ChunkMesh{std::make_unique<Mesh<ChunkVertex>>(
vertexBuffer.get(), vertexCount, indexBuffer.get(), indexCount
vertexBuffer.get(), vertexCount,
std::vector<IndexBufferData> {IndexBufferData {indexBuffer.get(), indexCount}}
), std::move(sortingMesh)};
}
+2 -1
View File
@@ -33,6 +33,7 @@ class BlocksRenderer {
int voxelBufferPadding = 2;
bool overflow = false;
bool cancelled = false;
bool denseRender = false;
const Chunk* chunk = nullptr;
std::unique_ptr<VoxelsVolume> voxelsBuffer;
@@ -137,7 +138,7 @@ class BlocksRenderer {
}
if ((variant.culling == CullingMode::DISABLED ||
(variant.culling == CullingMode::OPTIONAL &&
settings.graphics.denseRender.get())) &&
denseRender)) &&
vox.id == def.rt.id) {
return true;
}
+1 -2
View File
@@ -89,8 +89,7 @@ ChunksRenderer::ChunksRenderer(
logger.info() << "created " << threadPool.getWorkersCount() << " workers";
}
ChunksRenderer::~ChunksRenderer() {
}
ChunksRenderer::~ChunksRenderer() = default;
const Mesh<ChunkVertex>* ChunksRenderer::render(
const std::shared_ptr<Chunk>& chunk, bool important
+1 -1
View File
@@ -47,7 +47,7 @@ struct ChunkMeshData {
};
struct ChunkMesh {
std::unique_ptr<Mesh<ChunkVertex> > mesh;
std::unique_ptr<Mesh<ChunkVertex>> mesh;
SortingMeshData sortingMeshData;
std::unique_ptr<Mesh<ChunkVertex> > sortedMesh = nullptr;
};