diff --git a/src/libs/gltf/gltf_data/lv_gltf_data.cpp b/src/libs/gltf/gltf_data/lv_gltf_data.cpp index 7618b5ca58..1c554be809 100644 --- a/src/libs/gltf/gltf_data/lv_gltf_data.cpp +++ b/src/libs/gltf/gltf_data/lv_gltf_data.cpp @@ -92,6 +92,22 @@ void lv_gltf_data_delete(lv_gltf_model_t * data) lv_gltf_model_node_t * node = (lv_gltf_model_node_t *) lv_array_at(&data->nodes, i); lv_gltf_model_node_deinit(node); } + lv_array_deinit(&data->nodes); + lv_array_deinit(&data->compiled_shaders); + + /* Explicitly call destructors for C++ objects initialized with placement new */ + data->textures.~vector(); + data->meshes.~vector(); + data->node_by_light_index.~vector(); + data->local_mesh_to_center_points_by_primitive.~map(); + data->skin_tex.~vector(); + data->validated_skins.~vector(); + data->blended_nodes_by_material_index.~map(); + data->opaque_nodes_by_material_index.~map(); + data->node_transform_cache.~map(); + data->channel_set_cache.~map(); + data->asset.~Asset(); + lv_free(data); } diff --git a/src/libs/gltf/gltf_view/lv_gltf_view.cpp b/src/libs/gltf/gltf_view/lv_gltf_view.cpp index 8fa4ad7878..f4527c61b0 100644 --- a/src/libs/gltf/gltf_view/lv_gltf_view.cpp +++ b/src/libs/gltf/gltf_view/lv_gltf_view.cpp @@ -682,6 +682,7 @@ static void lv_gltf_destructor(const lv_obj_class_t * class_p, lv_obj_t * obj) for(size_t i = 0; i < n; ++i) { lv_gltf_data_delete(*(lv_gltf_model_t **)lv_array_at(&view->models, i)); } + lv_array_deinit(&view->models); if(view->environment && view->owns_environment) { lv_gltf_environment_delete(view->environment); }