diff --git a/src/Nazara/Graphics/GraphicalMesh.cpp b/src/Nazara/Graphics/GraphicalMesh.cpp index 3dc57bec9..63b475ba5 100644 --- a/src/Nazara/Graphics/GraphicalMesh.cpp +++ b/src/Nazara/Graphics/GraphicalMesh.cpp @@ -25,22 +25,27 @@ namespace Nz const StaticMesh& staticMesh = static_cast(subMesh); - const std::shared_ptr& indexBuffer = staticMesh.GetIndexBuffer(); const std::shared_ptr& vertexBuffer = staticMesh.GetVertexBuffer(); - - assert(indexBuffer->GetBuffer()->GetStorage() == DataStorage::Software); - const SoftwareBuffer* indexBufferContent = static_cast(indexBuffer->GetBuffer().get()); - assert(vertexBuffer->GetBuffer()->GetStorage() == DataStorage::Software); const SoftwareBuffer* vertexBufferContent = static_cast(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& indexBuffer = staticMesh.GetIndexBuffer(); + if (indexBuffer) + { + assert(indexBuffer->GetBuffer()->GetStorage() == DataStorage::Software); + const SoftwareBuffer* indexBufferContent = static_cast(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())) diff --git a/src/Nazara/Graphics/SubmeshRenderer.cpp b/src/Nazara/Graphics/SubmeshRenderer.cpp index 7246f394e..808adbf1e 100644 --- a/src/Nazara/Graphics/SubmeshRenderer.cpp +++ b/src/Nazara/Graphics/SubmeshRenderer.cpp @@ -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; }