Blender
V3.3
|
#include "CLG_log.h"
#include "MEM_guardedalloc.h"
#include "DNA_ID.h"
#include "DNA_key_types.h"
#include "BLI_utildefines.h"
#include "BLI_listbase.h"
#include "BKE_anim_data.h"
#include "BKE_asset.h"
#include "BKE_idprop.h"
#include "BKE_idtype.h"
#include "BKE_key.h"
#include "BKE_layer.h"
#include "BKE_lib_id.h"
#include "BKE_lib_override.h"
#include "BKE_lib_remap.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_main_namemap.h"
#include "lib_intern.h"
#include "DEG_depsgraph.h"
Go to the source code of this file.
Functions | |
void | BKE_libblock_free_data (ID *id, const bool do_id_user) |
void | BKE_libblock_free_datablock (ID *id, const int UNUSED(flag)) |
void | BKE_id_free_ex (Main *bmain, void *idv, int flag, const bool use_flag_from_idtag) |
void | BKE_id_free (Main *bmain, void *idv) |
void | BKE_id_free_us (Main *bmain, void *idv) |
static size_t | id_delete (Main *bmain, const bool do_tagged_deletion) |
void | BKE_id_delete (Main *bmain, void *idv) |
size_t | BKE_id_multi_tagged_delete (Main *bmain) |
Python Data Handling | |
void | BKE_libblock_free_data_py (ID *id) |
Variables | |
static CLG_LogRef | LOG = {.identifier = "bke.lib_id_delete"} |
Contains management of ID's for freeing & deletion.
Definition in file lib_id_delete.c.
Properly delete a single ID from given bmain database.
Definition at line 366 of file lib_id_delete.c.
References BKE_main_id_tag_all(), BLI_assert_msg, id_delete(), LIB_TAG_DOIT, and LIB_TAG_NO_MAIN.
Referenced by BKE_blendfile_read_make_empty(), BKE_brush_delete(), BKE_collection_delete(), BKE_lib_override_library_create_from_tag(), BLO_main_validate_shapekeys(), BLO_update_defaults_startup_blend(), clear_override_library_exec(), collection_unlink_exec(), ED_scene_delete(), id_override_library_clear_single_fn(), Freestyle::PythonInterpreter::interpretFile(), outliner_object_delete_fn(), override_idtemplate_clear_exec(), text_unlink_exec(), trace_end_job(), volume_import_exec(), and BCAnimation::~BCAnimation().
Complete ID freeing, should be usable in most cases (even for out-of-Main IDs).
See BKE_id_free_ex description for full details.
bmain | Main database containing the freed ID, can be NULL in case it's a temp ID outside of any Main. |
idv | Pointer to ID to be freed. |
Definition at line 172 of file lib_id_delete.c.
References BKE_id_free_ex().
Referenced by bake(), BKE_blendfile_library_relocate(), BKE_crazyspace_build_sculpt(), BKE_crazyspace_get_first_deform_matrices_editbmesh(), BKE_fluid_modifier_freeEffector(), BKE_fluid_modifier_freeFlow(), BKE_id_free_us(), BKE_image_merge(), BKE_lib_override_library_resync(), BKE_mesh_create_derived_for_modifier(), BKE_mesh_eval_geometry(), BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(), BKE_mesh_nomain_to_mesh(), BKE_mesh_runtime_clear_cache(), BKE_object_free_caches(), BKE_object_to_curve_clear(), BKE_object_to_mesh_clear(), BKE_sculpt_get_first_deform_matrices(), BKE_workspace_layout_remove(), BKE_workspace_remove(), bpy_bmesh_from_object(), C_BVHTree_FromObject(), canvas_copyMesh(), MeshComponent::clear(), PointCloudComponent::clear(), CurveComponent::clear(), VolumeComponent::clear(), cloth_build_springs(), construct_param_handle_subsurfed(), deformMatrices(), deformVerts(), deformVertsEM(), distribute_particles_on_dm(), do_hair_dynamics(), do_multires_bake(), dynamicPaint_brushMeshCalculateVelocity(), dynamicPaint_Modifier_apply(), dynamicPaint_Modifier_free_runtime(), dynamicPaint_paintMesh(), ED_workspace_delete(), editbmesh_calc_modifiers(), EEVEE_shaders_free(), final_skin(), blender::io::alembic::ABCGenericMeshWriter::free_export_mesh(), blender::io::usd::USDGenericMeshWriter::free_export_mesh(), blender::io::alembic::ABCMetaballWriter::free_export_mesh(), blender::io::usd::USDMetaballWriter::free_export_mesh(), free_hair(), freeData(), geometry_extract_apply(), gpencil_do_frame_fill(), blender::compositor::MaskOperation::init_execution(), knifeproject_poly_from_object(), lib_override_library_main_resync_on_library_indirect_level(), lineart_geometry_object_load(), mesh_calc_modifiers(), mesh_new_from_curve_type_object(), mesh_wrapper_ensure_subdivision(), mirrorModifier__doMirror(), MOD_deform_mesh_eval_get(), modifier_apply_shape(), modifyMesh(), multiresModifier_reshapeFromDeformModifier(), blender::nodes::node_geo_deform_curves_on_surface_cc::node_geo_exec(), blender::ed::space_node::node_group_ungroup(), object_for_curve_to_mesh_free(), GeometryExporter::operator()(), paint_mask_slice_exec(), poselib_blend_free(), psys_thread_context_init_distribute(), quadriflow_start_job(), RE_bake_normal_world_to_tangent(), RE_bake_pixels_populate_from_objects(), read_libblock(), remap_hair_emitter(), remesh_symmetry_bisect(), remesh_symmetry_mirror(), sculpt_gesture_trim_geometry_free(), sculpt_gesture_trim_normals_update(), seq_render_mask(), blender::bke::tests::TEST(), voxel_remesh_exec(), and blender::eevee::MaterialModule::~MaterialModule().
Complete ID freeing, extended version for corner cases. Can override default (and safe!) freeing process, to gain some speed up.
At that point, given id is assumed to not be used by any other data-block already (might not be actually true, in case e.g. several inter-related IDs get freed together...). However, they might still be using (referencing) other IDs, this code takes care of it if LIB_TAG_NO_USER_REFCOUNT is not defined.
bmain | Main database containing the freed ID, can be NULL in case it's a temp ID outside of any Main. |
idv | Pointer to ID to be freed. |
flag | Set of LIB_ID_FREE_... flags controlling/overriding usual freeing process, 0 to get default safe behavior. |
use_flag_from_idtag | Still use freeing info flags from given ID datablock, even if some overriding ones are passed in flag parameter. |
Definition at line 82 of file lib_id_delete.c.
References BKE_id_free_ex(), BKE_id_remapper_add(), BKE_id_remapper_create(), BKE_id_remapper_free(), BKE_key_from_id(), BKE_libblock_free_data(), BKE_libblock_free_data_py(), BKE_libblock_free_datablock(), BKE_libblock_relink_ex(), BKE_main_lock(), BKE_main_namemap_remove_name(), BKE_main_unlock(), BLI_assert, BLI_remlink(), DEG_id_type_tag(), free_notifier_reference_cb, GS, id, Key::id, ID_REMAP_SKIP_USER_CLEAR, Main::is_locked_for_linking, LIB_ID_FREE_NO_DEG_TAG, LIB_ID_FREE_NO_MAIN, LIB_ID_FREE_NO_NAMEMAP_REMOVE, LIB_ID_FREE_NO_UI_USER, LIB_ID_FREE_NO_USER_REFCOUNT, LIB_ID_FREE_NOT_ALLOCATED, LIB_TAG_NO_MAIN, LIB_TAG_NO_USER_REFCOUNT, LIB_TAG_NOT_ALLOCATED, MEM_freeN, ID::name, NULL, remap_editor_id_reference_cb, ID::tag, type, and which_libbase().
Referenced by BKE_id_free(), BKE_id_free_ex(), BKE_lib_override_library_operations_store_finalize(), BKE_lib_override_library_operations_store_start(), BKE_lib_override_library_update(), BKE_main_free(), ED_mesh_join_objects_exec(), and id_delete().
Not really a freeing function by itself, it decrements usercount of given id, and only frees it if it reaches 0.
Definition at line 177 of file lib_id_delete.c.
References BKE_id_free(), BKE_libblock_unlink(), GS, id, ID_IS_LINKED, ID_OB, id_us_clear_real(), id_us_min(), ID::name, and ID::us.
Referenced by animchannels_delete_exec(), BKE_object_shapekey_free(), collection_object_remove(), DocumentImporter::create_camera_object(), DocumentImporter::create_light_object(), MeshImporter::create_mesh_object(), gpencil_layer_remove_exec(), blender::io::usd::import_endjob(), import_endjob(), and WM_drag_free_imported_drag_ID().
size_t BKE_id_multi_tagged_delete | ( | struct Main * | bmain | ) |
Properly delete all IDs tagged with LIB_TAG_DOIT, in given bmain database.
This is more efficient than calling BKE_id_delete repetitively on a large set of IDs (several times faster when deleting most of the IDs at once).
Definition at line 377 of file lib_id_delete.c.
References id_delete().
Referenced by BKE_blendfile_append(), BKE_blendfile_library_relocate(), BKE_lib_override_library_delete(), bpy_batch_remove(), bpy_orphans_purge(), lib_override_library_resync(), object_delete_exec(), outliner_delete_exec(), outliner_id_delete_invoke(), outliner_id_operation_exec(), outliner_lib_operation_exec(), and outliner_orphans_purge_exec().
Definition at line 44 of file lib_id_delete.c.
References ID::asset_data, BKE_animdata_free(), BKE_asset_metadata_free(), BKE_lib_override_library_free(), id, IDP_FreePropertyContent_ex(), ID::library_weak_reference, MEM_freeN, NULL, ID::override_library, and ID::properties.
Referenced by BKE_collection_free_data(), BKE_gpencil_eval_delete(), BKE_id_free_ex(), BKE_mesh_eval_delete(), BKE_object_free_derived_caches(), blender::deg::deg_free_copy_on_write_datablock(), ntree_free_data(), ntreeFreeEmbeddedTree(), ntreeFreeLocalTree(), particle_settings_free_local(), prefetch_freejob(), and wm_close_and_free_all().
In most cases BKE_id_free_ex handles this, when lower level functions are called directly this function will need to be called too, if Python has access to the data.
ID data-blocks such as Material.nodetree are not stored in Main.
Definition at line 386 of file lib_id_delete.c.
References BPY_DECREF_RNA_INVALIDATE(), BPY_id_release(), id, ID::py_instance, and UNUSED_VARS.
Referenced by BKE_id_free_ex(), blender::deg::deg_free_copy_on_write_datablock(), ntreeFreeEmbeddedTree(), scene_free_data(), and wm_close_and_free_all().
Definition at line 68 of file lib_id_delete.c.
References BKE_idtype_get_info_from_id(), BLI_assert_msg, IDTypeInfo::free_data, and NULL.
Referenced by BKE_id_free_ex().
Definition at line 202 of file lib_id_delete.c.
References BKE_id_free_ex(), BKE_id_remapper_add(), BKE_id_remapper_clear(), BKE_id_remapper_create(), BKE_id_remapper_free(), BKE_id_remapper_is_empty(), BKE_layer_collection_resync_allow(), BKE_layer_collection_resync_forbid(), BKE_libblock_relink_ex(), BKE_libblock_remap_locked(), BKE_libblock_remap_multiple_locked(), BKE_main_collection_sync_remap(), BKE_main_lock(), BKE_main_namemap_remove_name(), BKE_main_unlock(), BLI_addtail(), BLI_remlink(), CLOG_ERROR, ListBase::first, id, Library::id, ID_IS_LINKED, ID_REAL_USERS, ID_REMAP_FLAG_NEVER_NULL_USAGE, ID_REMAP_FORCE_INTERNAL_RUNTIME_POINTERS, ID_REMAP_FORCE_NEVER_NULL_USAGE, ID_REMAP_SKIP_USER_CLEAR, INDEX_ID_MAX, Main::is_memfile_undo_written, ListBase::last, ID::lib, LIB_ID_FREE_NO_MAIN, LIB_ID_FREE_NO_UI_USER, LIB_ID_FREE_NO_USER_REFCOUNT, LIB_TAG_DOIT, LIB_TAG_EXTRAUSER_SET, LIB_TAG_NO_MAIN, LOG, ID::name, ID::next, Link::next, NULL, set_listbasepointers(), and ID::tag.
Referenced by BKE_id_delete(), and BKE_id_multi_tagged_delete().
|
static |
Definition at line 42 of file lib_id_delete.c.
Referenced by id_delete().