implement global index buffer

This commit is contained in:
Dynamitos
2023-11-26 11:27:39 +01:00
parent 89cee2e41a
commit 52c7fce931
9 changed files with 58 additions and 81 deletions
+5 -11
View File
@@ -155,24 +155,18 @@ void BasePass::render()
command->bindDescriptor(descriptorSets);
if (graphics->supportMeshShading())
{
command->dispatch(instance.numMeshes, 1, 1);
command->dispatch(instance.meshes.size(), 1, 1);
}
else
{
command->bindIndexBuffer(vertexData->getIndexBuffer());
uint32 instanceOffset = 0;
for (const auto& mesh : instance.meshes)
for (const auto& [instance, meshData] : instance.meshes)
{
uint32 vertexOffset = vertexData->getMeshOffset(mesh.id);
if (mesh.indexBuffer != nullptr)
if (meshData.numIndices > 0)
{
command->bindIndexBuffer(mesh.indexBuffer);
command->drawIndexed(mesh.indexBuffer->getNumIndices(), 1, 0, vertexOffset, instanceOffset);
command->drawIndexed(meshData.numIndices, 1, meshData.firstIndex, meshData.indicesOffset, instanceOffset++);
}
else
{
command->draw(vertexData->getMeshVertexCount(mesh.id), 1, vertexOffset, instanceOffset);
}
instanceOffset += mesh.meshes;
}
}
}