diff --git a/openVulkanoCpp/Scene/MeshWriter.cpp b/openVulkanoCpp/Scene/MeshWriter.cpp index b1fe6ea..556743c 100644 --- a/openVulkanoCpp/Scene/MeshWriter.cpp +++ b/openVulkanoCpp/Scene/MeshWriter.cpp @@ -100,9 +100,14 @@ namespace OpenVulkano::Scene mesh.mPrimitiveTypes = aiPrimitiveType_TRIANGLE; mesh.mNumUVComponents[0] = 2; - mesh.mVertices = new aiVector3D[geometry->vertexCount]; - mesh.mNormals = new aiVector3D[geometry->vertexCount]; - mesh.mTextureCoords[0] = new aiVector3D[geometry->vertexCount]; + std::unique_ptr vertices = std::make_unique(geometry->vertexCount); + mesh.mVertices = vertices.get(); + + std::unique_ptr normals = std::make_unique(geometry->vertexCount); + mesh.mNormals = normals.get(); + + std::unique_ptr texCoords = std::make_unique(geometry->vertexCount); + mesh.mTextureCoords[0] = texCoords.get(); float scaling = 100; // fbx units are centimeters... for (uint32_t i = 0; i < geometry->vertexCount; ++i) @@ -114,22 +119,27 @@ namespace OpenVulkano::Scene } mesh.mNumFaces = geometry->indexCount / 3; - mesh.mFaces = new aiFace[mesh.mNumFaces]; + std::unique_ptr faces = std::make_unique(mesh.mNumFaces); + mesh.mFaces = faces.get(); + + std::unique_ptr indices = std::make_unique(geometry->indexCount); + size_t lastUsedIndex = 0; for (uint32_t i = 0; i < mesh.mNumFaces; ++i) { aiFace& face = mesh.mFaces[i]; face.mNumIndices = 3; - face.mIndices = new unsigned int[face.mNumIndices]; + face.mIndices = &indices[lastUsedIndex]; face.mIndices[0] = geometry->GetIndex(i * 3 + 0); face.mIndices[1] = geometry->GetIndex(i * 3 + 1); face.mIndices[2] = geometry->GetIndex(i * 3 + 2); + + lastUsedIndex += face.mNumIndices; } - aiMesh* meshes[1]; + aiMesh* meshes[1] = { &mesh }; scene.mMeshes = meshes; - scene.mMeshes[0] = &mesh; scene.mNumMeshes = 1; unsigned int meshIndices[1]; @@ -138,9 +148,8 @@ namespace OpenVulkano::Scene scene.mRootNode->mNumMeshes = 1; aiMaterial material; - aiMaterial* materials[1]; + aiMaterial* materials[1] = { &material }; scene.mMaterials = materials; - scene.mMaterials[0] = &material; scene.mNumMaterials = 1; aiString externalPath(texturePath); @@ -149,8 +158,18 @@ namespace OpenVulkano::Scene Assimp::Exporter exporter; aiReturn result = exporter.Export(&scene, "fbx", fbxPath); - scene.mRootNode = nullptr; + mesh.mVertices = nullptr; + mesh.mNormals = nullptr; + mesh.mTextureCoords[0] = nullptr; + for (uint32_t i = 0; i < mesh.mNumFaces; ++i) + { + aiFace& face = mesh.mFaces[i]; + face.mIndices = nullptr; + } + mesh.mFaces = nullptr; + rootNode.mMeshes = nullptr; + scene.mRootNode = nullptr; scene.mMeshes = nullptr; scene.mMaterials = nullptr;