Clean up resources, refactoring, compiler warnings
This commit is contained in:
parent
81bd22834e
commit
268d268859
1 changed files with 21 additions and 19 deletions
|
|
@ -53,7 +53,7 @@ public:
|
||||||
} vertices;
|
} vertices;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
vkMeshLoader::MeshBuffer object;
|
vkMeshLoader::MeshBuffer terrain;
|
||||||
vkMeshLoader::MeshBuffer skysphere;
|
vkMeshLoader::MeshBuffer skysphere;
|
||||||
} meshes;
|
} meshes;
|
||||||
|
|
||||||
|
|
@ -134,6 +134,7 @@ public:
|
||||||
// Note : Inherited destructor cleans up resources stored in base class
|
// Note : Inherited destructor cleans up resources stored in base class
|
||||||
vkDestroyPipeline(device, pipelines.terrain, nullptr);
|
vkDestroyPipeline(device, pipelines.terrain, nullptr);
|
||||||
vkDestroyPipeline(device, pipelines.wireframe, nullptr);
|
vkDestroyPipeline(device, pipelines.wireframe, nullptr);
|
||||||
|
vkDestroyPipeline(device, pipelines.skysphere, nullptr);
|
||||||
|
|
||||||
vkDestroyPipelineLayout(device, pipelineLayouts.skysphere, nullptr);
|
vkDestroyPipelineLayout(device, pipelineLayouts.skysphere, nullptr);
|
||||||
vkDestroyPipelineLayout(device, pipelineLayouts.terrain, nullptr);
|
vkDestroyPipelineLayout(device, pipelineLayouts.terrain, nullptr);
|
||||||
|
|
@ -141,7 +142,8 @@ public:
|
||||||
vkDestroyDescriptorSetLayout(device, descriptorSetLayouts.terrain, nullptr);
|
vkDestroyDescriptorSetLayout(device, descriptorSetLayouts.terrain, nullptr);
|
||||||
vkDestroyDescriptorSetLayout(device, descriptorSetLayouts.skysphere, nullptr);
|
vkDestroyDescriptorSetLayout(device, descriptorSetLayouts.skysphere, nullptr);
|
||||||
|
|
||||||
vkMeshLoader::freeMeshBufferResources(device, &meshes.object);
|
vkMeshLoader::freeMeshBufferResources(device, &meshes.terrain);
|
||||||
|
vkMeshLoader::freeMeshBufferResources(device, &meshes.skysphere);
|
||||||
|
|
||||||
vkDestroyBuffer(device, uniformData.terrainTessellation.buffer, nullptr);
|
vkDestroyBuffer(device, uniformData.terrainTessellation.buffer, nullptr);
|
||||||
vkFreeMemory(device, uniformData.terrainTessellation.memory, nullptr);
|
vkFreeMemory(device, uniformData.terrainTessellation.memory, nullptr);
|
||||||
|
|
@ -314,9 +316,9 @@ public:
|
||||||
// Render
|
// Render
|
||||||
vkCmdBindPipeline(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, wireframe ? pipelines.wireframe : pipelines.terrain);
|
vkCmdBindPipeline(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, wireframe ? pipelines.wireframe : pipelines.terrain);
|
||||||
vkCmdBindDescriptorSets(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayouts.terrain, 0, 1, &descriptorSets.terrain, 0, NULL);
|
vkCmdBindDescriptorSets(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayouts.terrain, 0, 1, &descriptorSets.terrain, 0, NULL);
|
||||||
vkCmdBindVertexBuffers(drawCmdBuffers[i], VERTEX_BUFFER_BIND_ID, 1, &meshes.object.vertices.buf, offsets);
|
vkCmdBindVertexBuffers(drawCmdBuffers[i], VERTEX_BUFFER_BIND_ID, 1, &meshes.terrain.vertices.buf, offsets);
|
||||||
vkCmdBindIndexBuffer(drawCmdBuffers[i], meshes.object.indices.buf, 0, VK_INDEX_TYPE_UINT32);
|
vkCmdBindIndexBuffer(drawCmdBuffers[i], meshes.terrain.indices.buf, 0, VK_INDEX_TYPE_UINT32);
|
||||||
vkCmdDrawIndexed(drawCmdBuffers[i], meshes.object.indexCount, 1, 0, 0, 0);
|
vkCmdDrawIndexed(drawCmdBuffers[i], meshes.terrain.indexCount, 1, 0, 0, 0);
|
||||||
// End pipeline statistics query
|
// End pipeline statistics query
|
||||||
vkCmdEndQuery(drawCmdBuffers[i], queryPool, 0);
|
vkCmdEndQuery(drawCmdBuffers[i], queryPool, 0);
|
||||||
|
|
||||||
|
|
@ -342,7 +344,7 @@ public:
|
||||||
HeightMap(std::string filename, uint32_t patchsize)
|
HeightMap(std::string filename, uint32_t patchsize)
|
||||||
{
|
{
|
||||||
gli::texture2D heightTex(gli::load(filename));
|
gli::texture2D heightTex(gli::load(filename));
|
||||||
dim = heightTex.dimensions().x;
|
dim = static_cast<uint32_t>(heightTex.dimensions().x);
|
||||||
heightdata = new uint16_t[dim * dim];
|
heightdata = new uint16_t[dim * dim];
|
||||||
memcpy(heightdata, heightTex.data(), heightTex.size());
|
memcpy(heightdata, heightTex.data(), heightTex.size());
|
||||||
this->scale = dim / patchsize;
|
this->scale = dim / patchsize;
|
||||||
|
|
@ -436,7 +438,7 @@ public:
|
||||||
indices[index + 3] = indices[index] + 1;
|
indices[index + 3] = indices[index] + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
meshes.object.indexCount = (PATCH_SIZE - 1) * (PATCH_SIZE - 1) * 4;
|
meshes.terrain.indexCount = (PATCH_SIZE - 1) * (PATCH_SIZE - 1) * 4;
|
||||||
|
|
||||||
uint32_t vertexBufferSize = (PATCH_SIZE * PATCH_SIZE * 4) * sizeof(Vertex);
|
uint32_t vertexBufferSize = (PATCH_SIZE * PATCH_SIZE * 4) * sizeof(Vertex);
|
||||||
uint32_t indexBufferSize = (w * w * 4) * sizeof(uint32_t);
|
uint32_t indexBufferSize = (w * w * 4) * sizeof(uint32_t);
|
||||||
|
|
@ -469,16 +471,16 @@ public:
|
||||||
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
||||||
vertexBufferSize,
|
vertexBufferSize,
|
||||||
nullptr,
|
nullptr,
|
||||||
&meshes.object.vertices.buf,
|
&meshes.terrain.vertices.buf,
|
||||||
&meshes.object.vertices.mem);
|
&meshes.terrain.vertices.mem);
|
||||||
|
|
||||||
createBuffer(
|
createBuffer(
|
||||||
VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
|
VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
|
||||||
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
||||||
indexBufferSize,
|
indexBufferSize,
|
||||||
nullptr,
|
nullptr,
|
||||||
&meshes.object.indices.buf,
|
&meshes.terrain.indices.buf,
|
||||||
&meshes.object.indices.mem);
|
&meshes.terrain.indices.mem);
|
||||||
|
|
||||||
// Copy from staging buffers
|
// Copy from staging buffers
|
||||||
VkCommandBuffer copyCmd = VulkanExampleBase::createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
|
VkCommandBuffer copyCmd = VulkanExampleBase::createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
|
||||||
|
|
@ -489,7 +491,7 @@ public:
|
||||||
vkCmdCopyBuffer(
|
vkCmdCopyBuffer(
|
||||||
copyCmd,
|
copyCmd,
|
||||||
vertexStaging.buffer,
|
vertexStaging.buffer,
|
||||||
meshes.object.vertices.buf,
|
meshes.terrain.vertices.buf,
|
||||||
1,
|
1,
|
||||||
©Region);
|
©Region);
|
||||||
|
|
||||||
|
|
@ -497,7 +499,7 @@ public:
|
||||||
vkCmdCopyBuffer(
|
vkCmdCopyBuffer(
|
||||||
copyCmd,
|
copyCmd,
|
||||||
indexStaging.buffer,
|
indexStaging.buffer,
|
||||||
meshes.object.indices.buf,
|
meshes.terrain.indices.buf,
|
||||||
1,
|
1,
|
||||||
©Region);
|
©Region);
|
||||||
|
|
||||||
|
|
@ -551,9 +553,9 @@ public:
|
||||||
sizeof(float) * 6);
|
sizeof(float) * 6);
|
||||||
|
|
||||||
vertices.inputState = vkTools::initializers::pipelineVertexInputStateCreateInfo();
|
vertices.inputState = vkTools::initializers::pipelineVertexInputStateCreateInfo();
|
||||||
vertices.inputState.vertexBindingDescriptionCount = vertices.bindingDescriptions.size();
|
vertices.inputState.vertexBindingDescriptionCount = static_cast<uint32_t>(vertices.bindingDescriptions.size());
|
||||||
vertices.inputState.pVertexBindingDescriptions = vertices.bindingDescriptions.data();
|
vertices.inputState.pVertexBindingDescriptions = vertices.bindingDescriptions.data();
|
||||||
vertices.inputState.vertexAttributeDescriptionCount = vertices.attributeDescriptions.size();
|
vertices.inputState.vertexAttributeDescriptionCount = static_cast<uint32_t>(vertices.attributeDescriptions.size());
|
||||||
vertices.inputState.pVertexAttributeDescriptions = vertices.attributeDescriptions.data();
|
vertices.inputState.pVertexAttributeDescriptions = vertices.attributeDescriptions.data();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -567,7 +569,7 @@ public:
|
||||||
|
|
||||||
VkDescriptorPoolCreateInfo descriptorPoolInfo =
|
VkDescriptorPoolCreateInfo descriptorPoolInfo =
|
||||||
vkTools::initializers::descriptorPoolCreateInfo(
|
vkTools::initializers::descriptorPoolCreateInfo(
|
||||||
poolSizes.size(),
|
static_cast<uint32_t>(poolSizes.size()),
|
||||||
poolSizes.data(),
|
poolSizes.data(),
|
||||||
2);
|
2);
|
||||||
|
|
||||||
|
|
@ -656,7 +658,7 @@ public:
|
||||||
2,
|
2,
|
||||||
&textures.terrainArray.descriptor),
|
&textures.terrainArray.descriptor),
|
||||||
};
|
};
|
||||||
vkUpdateDescriptorSets(device, writeDescriptorSets.size(), writeDescriptorSets.data(), 0, NULL);
|
vkUpdateDescriptorSets(device, static_cast<uint32_t>(writeDescriptorSets.size()), writeDescriptorSets.data(), 0, NULL);
|
||||||
|
|
||||||
// Skysphere
|
// Skysphere
|
||||||
allocInfo = vkTools::initializers::descriptorSetAllocateInfo(descriptorPool, &descriptorSetLayouts.skysphere, 1);
|
allocInfo = vkTools::initializers::descriptorSetAllocateInfo(descriptorPool, &descriptorSetLayouts.skysphere, 1);
|
||||||
|
|
@ -677,7 +679,7 @@ public:
|
||||||
1,
|
1,
|
||||||
&textures.skySphere.descriptor),
|
&textures.skySphere.descriptor),
|
||||||
};
|
};
|
||||||
vkUpdateDescriptorSets(device, writeDescriptorSets.size(), writeDescriptorSets.data(), 0, NULL);
|
vkUpdateDescriptorSets(device, static_cast<uint32_t>(writeDescriptorSets.size()), writeDescriptorSets.data(), 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void preparePipelines()
|
void preparePipelines()
|
||||||
|
|
@ -727,7 +729,7 @@ public:
|
||||||
VkPipelineDynamicStateCreateInfo dynamicState =
|
VkPipelineDynamicStateCreateInfo dynamicState =
|
||||||
vkTools::initializers::pipelineDynamicStateCreateInfo(
|
vkTools::initializers::pipelineDynamicStateCreateInfo(
|
||||||
dynamicStateEnables.data(),
|
dynamicStateEnables.data(),
|
||||||
dynamicStateEnables.size(),
|
static_cast<uint32_t>(dynamicStateEnables.size()),
|
||||||
0);
|
0);
|
||||||
|
|
||||||
// We render the terrain as a grid of quad patches
|
// We render the terrain as a grid of quad patches
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue