GraphicalMesh: Handle missing index buffer

This commit is contained in:
SirLynix 2022-06-28 08:55:48 +02:00
parent 093d9d344e
commit 87012a4a52
2 changed files with 18 additions and 11 deletions

View File

@ -25,22 +25,27 @@ namespace Nz
const StaticMesh& staticMesh = static_cast<const StaticMesh&>(subMesh);
const std::shared_ptr<const IndexBuffer>& indexBuffer = staticMesh.GetIndexBuffer();
const std::shared_ptr<VertexBuffer>& vertexBuffer = staticMesh.GetVertexBuffer();
assert(indexBuffer->GetBuffer()->GetStorage() == DataStorage::Software);
const SoftwareBuffer* indexBufferContent = static_cast<const SoftwareBuffer*>(indexBuffer->GetBuffer().get());
assert(vertexBuffer->GetBuffer()->GetStorage() == DataStorage::Software);
const SoftwareBuffer* vertexBufferContent = static_cast<const SoftwareBuffer*>(vertexBuffer->GetBuffer().get());
GraphicalMesh::SubMesh submeshData;
submeshData.indexBuffer = renderDevice->InstantiateBuffer(BufferType::Index, indexBuffer->GetStride() * indexBuffer->GetIndexCount(), BufferUsage::DeviceLocal | BufferUsage::Write);
if (!submeshData.indexBuffer->Fill(indexBufferContent->GetData() + indexBuffer->GetStartOffset(), 0, indexBuffer->GetEndOffset() - indexBuffer->GetStartOffset()))
throw std::runtime_error("failed to fill index buffer");
submeshData.indexCount = indexBuffer->GetIndexCount();
submeshData.indexType = indexBuffer->GetIndexType();
const std::shared_ptr<const IndexBuffer>& indexBuffer = staticMesh.GetIndexBuffer();
if (indexBuffer)
{
assert(indexBuffer->GetBuffer()->GetStorage() == DataStorage::Software);
const SoftwareBuffer* indexBufferContent = static_cast<const SoftwareBuffer*>(indexBuffer->GetBuffer().get());
submeshData.indexBuffer = renderDevice->InstantiateBuffer(BufferType::Index, indexBuffer->GetStride() * indexBuffer->GetIndexCount(), BufferUsage::DeviceLocal | BufferUsage::Write);
if (!submeshData.indexBuffer->Fill(indexBufferContent->GetData() + indexBuffer->GetStartOffset(), 0, indexBuffer->GetEndOffset() - indexBuffer->GetStartOffset()))
throw std::runtime_error("failed to fill index buffer");
submeshData.indexCount = indexBuffer->GetIndexCount();
submeshData.indexType = indexBuffer->GetIndexType();
}
else
submeshData.indexCount = vertexBuffer->GetVertexCount();
submeshData.vertexBuffer = renderDevice->InstantiateBuffer(BufferType::Vertex, vertexBuffer->GetStride() * vertexBuffer->GetVertexCount(), BufferUsage::DeviceLocal | BufferUsage::Write);
if (!submeshData.vertexBuffer->Fill(vertexBufferContent->GetData() + vertexBuffer->GetStartOffset(), 0, vertexBuffer->GetEndOffset() - vertexBuffer->GetStartOffset()))

View File

@ -218,7 +218,9 @@ namespace Nz
if (currentIndexBuffer != drawData.indexBuffer)
{
commandBuffer.BindIndexBuffer(*drawData.indexBuffer, drawData.indexType);
if (drawData.indexBuffer)
commandBuffer.BindIndexBuffer(*drawData.indexBuffer, drawData.indexType);
currentIndexBuffer = drawData.indexBuffer;
}