mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-27 20:51:14 +08:00
fix(gltf): fix memory leaks caused by incomplete resource cleanup (#9579)
Signed-off-by: pengyiqiang <pengyiqiang@xiaomi.com>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user