From baa2c164641b0c422a43893740cbfdefd130b1c2 Mon Sep 17 00:00:00 2001 From: jonnxie Date: Mon, 21 Mar 2022 14:57:59 +0800 Subject: [PATCH 1/3] Fixed loadAnimation function memory leak bug. --- base/VulkanglTFModel.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/base/VulkanglTFModel.cpp b/base/VulkanglTFModel.cpp index 324f1f55..a4b5978c 100644 --- a/base/VulkanglTFModel.cpp +++ b/base/VulkanglTFModel.cpp @@ -1074,7 +1074,7 @@ void vkglTF::Model::loadAnimations(tinygltf::Model &gltfModel) for (size_t index = 0; index < accessor.count; index++) { sampler.inputs.push_back(buf[index]); } - + delete[] buf; for (auto input : sampler.inputs) { if (input < animation.start) { animation.start = input; @@ -1100,7 +1100,8 @@ void vkglTF::Model::loadAnimations(tinygltf::Model &gltfModel) for (size_t index = 0; index < accessor.count; index++) { sampler.outputsVec4.push_back(glm::vec4(buf[index], 0.0f)); } - break; + delete[] buf; + break; } case TINYGLTF_TYPE_VEC4: { glm::vec4 *buf = new glm::vec4[accessor.count]; @@ -1108,7 +1109,8 @@ void vkglTF::Model::loadAnimations(tinygltf::Model &gltfModel) for (size_t index = 0; index < accessor.count; index++) { sampler.outputsVec4.push_back(buf[index]); } - break; + delete[] buf; + break; } default: { std::cout << "unknown type" << std::endl; From c15d44e855270e7fd8241b54cf7c00ac3b467b57 Mon Sep 17 00:00:00 2001 From: jonnxie Date: Tue, 22 Mar 2022 10:59:03 +0800 Subject: [PATCH 2/3] Fixed loadNode function memory leak bug. --- base/VulkanglTFModel.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/base/VulkanglTFModel.cpp b/base/VulkanglTFModel.cpp index a4b5978c..1fa57777 100644 --- a/base/VulkanglTFModel.cpp +++ b/base/VulkanglTFModel.cpp @@ -906,6 +906,7 @@ void vkglTF::Model::loadNode(vkglTF::Node *parent, const tinygltf::Node &node, u for (size_t index = 0; index < accessor.count; index++) { indexBuffer.push_back(buf[index] + vertexStart); } + delete[] buf; break; } case TINYGLTF_PARAMETER_TYPE_UNSIGNED_SHORT: { @@ -914,7 +915,8 @@ void vkglTF::Model::loadNode(vkglTF::Node *parent, const tinygltf::Node &node, u for (size_t index = 0; index < accessor.count; index++) { indexBuffer.push_back(buf[index] + vertexStart); } - break; + delete[] buf; + break; } case TINYGLTF_PARAMETER_TYPE_UNSIGNED_BYTE: { uint8_t *buf = new uint8_t[accessor.count]; @@ -922,7 +924,8 @@ void vkglTF::Model::loadNode(vkglTF::Node *parent, const tinygltf::Node &node, u for (size_t index = 0; index < accessor.count; index++) { indexBuffer.push_back(buf[index] + vertexStart); } - break; + delete[] buf; + break; } default: std::cerr << "Index component type " << accessor.componentType << " not supported!" << std::endl; From 6b316e694f246186992d95f939275cedf5a714d6 Mon Sep 17 00:00:00 2001 From: jonnxie Date: Tue, 22 Mar 2022 11:08:38 +0800 Subject: [PATCH 3/3] Fixed Mesh class and Model class memory leak. --- base/VulkanglTFModel.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/base/VulkanglTFModel.cpp b/base/VulkanglTFModel.cpp index 1fa57777..c9c9a626 100644 --- a/base/VulkanglTFModel.cpp +++ b/base/VulkanglTFModel.cpp @@ -499,6 +499,10 @@ vkglTF::Mesh::Mesh(vks::VulkanDevice *device, glm::mat4 matrix) { vkglTF::Mesh::~Mesh() { vkDestroyBuffer(device->logicalDevice, uniformBuffer.buffer, nullptr); vkFreeMemory(device->logicalDevice, uniformBuffer.memory, nullptr); + for(auto primitive : primitives) + { + delete primitive; + } } /* @@ -735,6 +739,9 @@ vkglTF::Model::~Model() for (auto node : nodes) { delete node; } + for (auto skin : skins) { + delete skin; + } if (descriptorSetLayoutUbo != VK_NULL_HANDLE) { vkDestroyDescriptorSetLayout(device->logicalDevice, descriptorSetLayoutUbo, nullptr); descriptorSetLayoutUbo = VK_NULL_HANDLE;