Mesh loader code cleanup
This commit is contained in:
parent
96ffb2bac3
commit
1634ed065e
3 changed files with 18 additions and 21 deletions
|
|
@ -70,11 +70,23 @@ namespace vkMeshLoader
|
||||||
/** @brief Mesh representation storing all data required to generate buffers */
|
/** @brief Mesh representation storing all data required to generate buffers */
|
||||||
struct MeshBuffer
|
struct MeshBuffer
|
||||||
{
|
{
|
||||||
|
VkDevice device = VK_NULL_HANDLE;
|
||||||
std::vector<MeshDescriptor> meshDescriptors;
|
std::vector<MeshDescriptor> meshDescriptors;
|
||||||
MeshBufferInfo vertices;
|
MeshBufferInfo vertices;
|
||||||
MeshBufferInfo indices;
|
MeshBufferInfo indices;
|
||||||
uint32_t indexCount;
|
uint32_t indexCount;
|
||||||
glm::vec3 dim;
|
glm::vec3 dim;
|
||||||
|
/** @brief Release all Vulkan resources held by this texture */
|
||||||
|
void destroy()
|
||||||
|
{
|
||||||
|
vkDestroyBuffer(device, vertices.buf, nullptr);
|
||||||
|
vkFreeMemory(device, vertices.mem, nullptr);
|
||||||
|
if (indices.buf != VK_NULL_HANDLE)
|
||||||
|
{
|
||||||
|
vkDestroyBuffer(device, indices.buf, nullptr);
|
||||||
|
vkFreeMemory(device, indices.mem, nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/** @brief Holds parameters for mesh creation */
|
/** @brief Holds parameters for mesh creation */
|
||||||
|
|
@ -110,7 +122,6 @@ namespace vkMeshLoader
|
||||||
return vSize;
|
return vSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: Always assumes float formats
|
|
||||||
/**
|
/**
|
||||||
* Generate vertex attribute descriptions for a layout at the given binding point
|
* Generate vertex attribute descriptions for a layout at the given binding point
|
||||||
*
|
*
|
||||||
|
|
@ -435,7 +446,6 @@ public:
|
||||||
std::vector<vkMeshLoader::VertexLayout> layout,
|
std::vector<vkMeshLoader::VertexLayout> layout,
|
||||||
vkMeshLoader::MeshCreateInfo *createInfo,
|
vkMeshLoader::MeshCreateInfo *createInfo,
|
||||||
bool useStaging,
|
bool useStaging,
|
||||||
VkCommandBuffer copyCmd,
|
|
||||||
VkQueue copyQueue)
|
VkQueue copyQueue)
|
||||||
{
|
{
|
||||||
glm::vec3 scale;
|
glm::vec3 scale;
|
||||||
|
|
@ -540,9 +550,10 @@ public:
|
||||||
}
|
}
|
||||||
meshBuffer->indices.size = indexBuffer.size() * sizeof(uint32_t);
|
meshBuffer->indices.size = indexBuffer.size() * sizeof(uint32_t);
|
||||||
meshBuffer->indexCount = static_cast<uint32_t>(indexBuffer.size());
|
meshBuffer->indexCount = static_cast<uint32_t>(indexBuffer.size());
|
||||||
|
meshBuffer->device = vulkanDevice->logicalDevice;
|
||||||
|
|
||||||
// Use staging buffer to move vertex and index buffer to device local memory
|
// Use staging buffer to move vertex and index buffer to device local memory
|
||||||
if (useStaging && copyQueue != VK_NULL_HANDLE && copyCmd != VK_NULL_HANDLE)
|
if (useStaging && copyQueue != VK_NULL_HANDLE)
|
||||||
{
|
{
|
||||||
// Create staging buffers
|
// Create staging buffers
|
||||||
struct {
|
struct {
|
||||||
|
|
@ -586,8 +597,7 @@ public:
|
||||||
&meshBuffer->indices.mem);
|
&meshBuffer->indices.mem);
|
||||||
|
|
||||||
// Copy from staging buffers
|
// Copy from staging buffers
|
||||||
VkCommandBufferBeginInfo cmdBufInfo = vkTools::initializers::commandBufferBeginInfo();
|
VkCommandBuffer copyCmd = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
|
||||||
VK_CHECK_RESULT(vkBeginCommandBuffer(copyCmd, &cmdBufInfo));
|
|
||||||
|
|
||||||
VkBufferCopy copyRegion = {};
|
VkBufferCopy copyRegion = {};
|
||||||
|
|
||||||
|
|
@ -607,15 +617,7 @@ public:
|
||||||
1,
|
1,
|
||||||
©Region);
|
©Region);
|
||||||
|
|
||||||
VK_CHECK_RESULT(vkEndCommandBuffer(copyCmd));
|
vulkanDevice->flushCommandBuffer(copyCmd, copyQueue);
|
||||||
|
|
||||||
VkSubmitInfo submitInfo = {};
|
|
||||||
submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
|
|
||||||
submitInfo.commandBufferCount = 1;
|
|
||||||
submitInfo.pCommandBuffers = ©Cmd;
|
|
||||||
|
|
||||||
VK_CHECK_RESULT(vkQueueSubmit(copyQueue, 1, &submitInfo, VK_NULL_HANDLE));
|
|
||||||
VK_CHECK_RESULT(vkQueueWaitIdle(copyQueue));
|
|
||||||
|
|
||||||
vkDestroyBuffer(vulkanDevice->logicalDevice, vertexStaging.buffer, nullptr);
|
vkDestroyBuffer(vulkanDevice->logicalDevice, vertexStaging.buffer, nullptr);
|
||||||
vkFreeMemory(vulkanDevice->logicalDevice, vertexStaging.memory, nullptr);
|
vkFreeMemory(vulkanDevice->logicalDevice, vertexStaging.memory, nullptr);
|
||||||
|
|
|
||||||
|
|
@ -232,18 +232,13 @@ void VulkanExampleBase::loadMesh(std::string filename, vkMeshLoader::MeshBuffer
|
||||||
mesh->LoadMesh(filename);
|
mesh->LoadMesh(filename);
|
||||||
assert(mesh->m_Entries.size() > 0);
|
assert(mesh->m_Entries.size() > 0);
|
||||||
|
|
||||||
VkCommandBuffer copyCmd = VulkanExampleBase::createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, false);
|
|
||||||
|
|
||||||
mesh->createBuffers(
|
mesh->createBuffers(
|
||||||
meshBuffer,
|
meshBuffer,
|
||||||
vertexLayout,
|
vertexLayout,
|
||||||
meshCreateInfo,
|
meshCreateInfo,
|
||||||
true,
|
true,
|
||||||
copyCmd,
|
|
||||||
queue);
|
queue);
|
||||||
|
|
||||||
vkFreeCommandBuffers(device, cmdPool, 1, ©Cmd);
|
|
||||||
|
|
||||||
meshBuffer->dim = mesh->dim.size;
|
meshBuffer->dim = mesh->dim.size;
|
||||||
|
|
||||||
delete(mesh);
|
delete(mesh);
|
||||||
|
|
|
||||||
|
|
@ -110,8 +110,8 @@ public:
|
||||||
vkDestroyDescriptorSetLayout(device, descriptorSetLayout, nullptr);
|
vkDestroyDescriptorSetLayout(device, descriptorSetLayout, nullptr);
|
||||||
vkDestroyBuffer(device, instanceBuffer.buffer, nullptr);
|
vkDestroyBuffer(device, instanceBuffer.buffer, nullptr);
|
||||||
vkFreeMemory(device, instanceBuffer.memory, nullptr);
|
vkFreeMemory(device, instanceBuffer.memory, nullptr);
|
||||||
vkMeshLoader::freeMeshBufferResources(device, &meshes.rock);
|
meshes.rock.destroy();
|
||||||
vkMeshLoader::freeMeshBufferResources(device, &meshes.planet);
|
meshes.planet.destroy();
|
||||||
textures.rocks.destroy();
|
textures.rocks.destroy();
|
||||||
textures.planet.destroy();
|
textures.planet.destroy();
|
||||||
uniformBuffers.scene.destroy();
|
uniformBuffers.scene.destroy();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue