GraphicalMesh: Handle missing index buffer
This commit is contained in:
parent
093d9d344e
commit
87012a4a52
|
|
@ -25,22 +25,27 @@ namespace Nz
|
||||||
|
|
||||||
const StaticMesh& staticMesh = static_cast<const StaticMesh&>(subMesh);
|
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();
|
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);
|
assert(vertexBuffer->GetBuffer()->GetStorage() == DataStorage::Software);
|
||||||
const SoftwareBuffer* vertexBufferContent = static_cast<const SoftwareBuffer*>(vertexBuffer->GetBuffer().get());
|
const SoftwareBuffer* vertexBufferContent = static_cast<const SoftwareBuffer*>(vertexBuffer->GetBuffer().get());
|
||||||
|
|
||||||
GraphicalMesh::SubMesh submeshData;
|
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();
|
const std::shared_ptr<const IndexBuffer>& indexBuffer = staticMesh.GetIndexBuffer();
|
||||||
submeshData.indexType = indexBuffer->GetIndexType();
|
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);
|
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()))
|
if (!submeshData.vertexBuffer->Fill(vertexBufferContent->GetData() + vertexBuffer->GetStartOffset(), 0, vertexBuffer->GetEndOffset() - vertexBuffer->GetStartOffset()))
|
||||||
|
|
|
||||||
|
|
@ -218,7 +218,9 @@ namespace Nz
|
||||||
|
|
||||||
if (currentIndexBuffer != drawData.indexBuffer)
|
if (currentIndexBuffer != drawData.indexBuffer)
|
||||||
{
|
{
|
||||||
commandBuffer.BindIndexBuffer(*drawData.indexBuffer, drawData.indexType);
|
if (drawData.indexBuffer)
|
||||||
|
commandBuffer.BindIndexBuffer(*drawData.indexBuffer, drawData.indexType);
|
||||||
|
|
||||||
currentIndexBuffer = drawData.indexBuffer;
|
currentIndexBuffer = drawData.indexBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue