Store vertex and index buffer sizes and set transfer source bits for mesh buffers
This commit is contained in:
parent
4c883a94ac
commit
96870602d5
1 changed files with 9 additions and 8 deletions
|
|
@ -51,6 +51,7 @@ namespace vkMeshLoader
|
||||||
{
|
{
|
||||||
VkBuffer buf = VK_NULL_HANDLE;
|
VkBuffer buf = VK_NULL_HANDLE;
|
||||||
VkDeviceMemory mem = VK_NULL_HANDLE;
|
VkDeviceMemory mem = VK_NULL_HANDLE;
|
||||||
|
size_t size = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MeshBuffer
|
struct MeshBuffer
|
||||||
|
|
@ -446,7 +447,7 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
size_t vertexBufferSize = vertexBuffer.size() * sizeof(float);
|
meshBuffer->vertices.size = vertexBuffer.size() * sizeof(float);
|
||||||
|
|
||||||
std::vector<uint32_t> indexBuffer;
|
std::vector<uint32_t> indexBuffer;
|
||||||
for (uint32_t m = 0; m < m_Entries.size(); m++)
|
for (uint32_t m = 0; m < m_Entries.size(); m++)
|
||||||
|
|
@ -457,7 +458,7 @@ public:
|
||||||
indexBuffer.push_back(m_Entries[m].Indices[i] + indexBase);
|
indexBuffer.push_back(m_Entries[m].Indices[i] + indexBase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
size_t indexBufferSize = indexBuffer.size() * sizeof(uint32_t);
|
meshBuffer->indices.size = indexBuffer.size() * sizeof(uint32_t);
|
||||||
|
|
||||||
VkMemoryAllocateInfo memAlloc = vkTools::initializers::memoryAllocateInfo();
|
VkMemoryAllocateInfo memAlloc = vkTools::initializers::memoryAllocateInfo();
|
||||||
VkMemoryRequirements memReqs;
|
VkMemoryRequirements memReqs;
|
||||||
|
|
@ -466,7 +467,7 @@ public:
|
||||||
void *data;
|
void *data;
|
||||||
|
|
||||||
// Generate vertex buffer
|
// Generate vertex buffer
|
||||||
VkBufferCreateInfo vBufferInfo = vkTools::initializers::bufferCreateInfo(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, vertexBufferSize);
|
VkBufferCreateInfo vBufferInfo = vkTools::initializers::bufferCreateInfo(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, meshBuffer->vertices.size);
|
||||||
err = vkCreateBuffer(device, &vBufferInfo, nullptr, &meshBuffer->vertices.buf);
|
err = vkCreateBuffer(device, &vBufferInfo, nullptr, &meshBuffer->vertices.buf);
|
||||||
assert(!err);
|
assert(!err);
|
||||||
vkGetBufferMemoryRequirements(device, meshBuffer->vertices.buf, &memReqs);
|
vkGetBufferMemoryRequirements(device, meshBuffer->vertices.buf, &memReqs);
|
||||||
|
|
@ -474,15 +475,15 @@ public:
|
||||||
getMemoryType(deviceMemoryProperties, memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, &memAlloc.memoryTypeIndex);
|
getMemoryType(deviceMemoryProperties, memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, &memAlloc.memoryTypeIndex);
|
||||||
err = vkAllocateMemory(device, &memAlloc, nullptr, &meshBuffer->vertices.mem);
|
err = vkAllocateMemory(device, &memAlloc, nullptr, &meshBuffer->vertices.mem);
|
||||||
assert(!err);
|
assert(!err);
|
||||||
err = vkMapMemory(device, meshBuffer->vertices.mem, 0, vertexBufferSize, 0, &data);
|
err = vkMapMemory(device, meshBuffer->vertices.mem, 0, meshBuffer->vertices.size, 0, &data);
|
||||||
assert(!err);
|
assert(!err);
|
||||||
memcpy(data, vertexBuffer.data(), vertexBufferSize);
|
memcpy(data, vertexBuffer.data(), meshBuffer->vertices.size);
|
||||||
vkUnmapMemory(device, meshBuffer->vertices.mem);
|
vkUnmapMemory(device, meshBuffer->vertices.mem);
|
||||||
err = vkBindBufferMemory(device, meshBuffer->vertices.buf, meshBuffer->vertices.mem, 0);
|
err = vkBindBufferMemory(device, meshBuffer->vertices.buf, meshBuffer->vertices.mem, 0);
|
||||||
assert(!err);
|
assert(!err);
|
||||||
|
|
||||||
// Generate index buffer
|
// Generate index buffer
|
||||||
VkBufferCreateInfo iBufferInfo = vkTools::initializers::bufferCreateInfo(VK_BUFFER_USAGE_INDEX_BUFFER_BIT, indexBufferSize);
|
VkBufferCreateInfo iBufferInfo = vkTools::initializers::bufferCreateInfo(VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, meshBuffer->indices.size);
|
||||||
err = vkCreateBuffer(device, &iBufferInfo, nullptr, &meshBuffer->indices.buf);
|
err = vkCreateBuffer(device, &iBufferInfo, nullptr, &meshBuffer->indices.buf);
|
||||||
assert(!err);
|
assert(!err);
|
||||||
vkGetBufferMemoryRequirements(device, meshBuffer->indices.buf, &memReqs);
|
vkGetBufferMemoryRequirements(device, meshBuffer->indices.buf, &memReqs);
|
||||||
|
|
@ -490,9 +491,9 @@ public:
|
||||||
getMemoryType(deviceMemoryProperties, memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, &memAlloc.memoryTypeIndex);
|
getMemoryType(deviceMemoryProperties, memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, &memAlloc.memoryTypeIndex);
|
||||||
err = vkAllocateMemory(device, &memAlloc, nullptr, &meshBuffer->indices.mem);
|
err = vkAllocateMemory(device, &memAlloc, nullptr, &meshBuffer->indices.mem);
|
||||||
assert(!err);
|
assert(!err);
|
||||||
err = vkMapMemory(device, meshBuffer->indices.mem, 0, indexBufferSize, 0, &data);
|
err = vkMapMemory(device, meshBuffer->indices.mem, 0, meshBuffer->indices.size, 0, &data);
|
||||||
assert(!err);
|
assert(!err);
|
||||||
memcpy(data, indexBuffer.data(), indexBufferSize);
|
memcpy(data, indexBuffer.data(), meshBuffer->indices.size);
|
||||||
vkUnmapMemory(device, meshBuffer->indices.mem);
|
vkUnmapMemory(device, meshBuffer->indices.mem);
|
||||||
err = vkBindBufferMemory(device, meshBuffer->indices.buf, meshBuffer->indices.mem, 0);
|
err = vkBindBufferMemory(device, meshBuffer->indices.buf, meshBuffer->indices.mem, 0);
|
||||||
assert(!err);
|
assert(!err);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue