feat: multiple index buffers per mesh support
This commit is contained in:
@@ -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)};
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user