diff --git a/src/graphics/model.c b/src/graphics/model.c index c7be1bf2..67520a29 100644 --- a/src/graphics/model.c +++ b/src/graphics/model.c @@ -54,6 +54,8 @@ static void visitNode(ModelData* modelData, ModelNode* node, mat4 transform, vec for (int c = 0; c < node->children.length; c++) { visitNode(modelData, node->children.data[c], newTransform, vertices, indices); } + + mat4_deinit(newTransform); } Model* lovrModelCreate(void* data, int size) { @@ -90,6 +92,7 @@ Model* lovrModelCreate(void* data, int size) { model->texture = NULL; + vec_deinit(&format); vec_deinit(&vertices); vec_deinit(&indices); return model; diff --git a/src/lovr/types/model.c b/src/lovr/types/model.c index 01252aab..fcb58d32 100644 --- a/src/lovr/types/model.c +++ b/src/lovr/types/model.c @@ -18,6 +18,8 @@ Model* luax_checkmodel(lua_State* L, int index) { } int luax_destroymodel(lua_State* L) { + Model* model = luax_checkmodel(L, 1); + lovrModelDestroy(model); return 0; } diff --git a/src/model/modelData.c b/src/model/modelData.c index 8c7d5f64..d525a287 100644 --- a/src/model/modelData.c +++ b/src/model/modelData.c @@ -102,6 +102,7 @@ void lovrModelDataDestroy(ModelData* modelData) { vec_deinit(&mesh->faces); vec_deinit(&mesh->vertices); + vec_deinit(&mesh->normals); free(mesh); } @@ -115,8 +116,10 @@ void lovrModelDataDestroy(ModelData* modelData) { vec_deinit(&node->meshes); vec_deinit(&node->children); vec_splice(&nodes, 0, 1); + free(node); } vec_deinit(&modelData->meshes); + vec_deinit(&nodes); free(modelData); }