mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-08 04:21:50 +00:00
feat: multiple index buffers per mesh support
This commit is contained in:
parent
6debc92ae5
commit
4a6ccf4847
7 changed files with 81 additions and 43 deletions
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue