|
Blender V5.0
|
#include "MEM_guardedalloc.h"#include "DNA_ID.h"#include "DNA_key_types.h"#include "BLI_utildefines.h"#include "BLI_listbase.h"#include "BLI_set.hh"#include "BLI_vector.hh"#include "BKE_anim_data.hh"#include "BKE_asset.hh"#include "BKE_idprop.hh"#include "BKE_idtype.hh"#include "BKE_key.hh"#include "BKE_layer.hh"#include "BKE_lib_id.hh"#include "BKE_lib_override.hh"#include "BKE_lib_remap.hh"#include "BKE_library.hh"#include "BKE_main.hh"#include "BKE_main_namemap.hh"#include "BLO_readfile.hh"#include "lib_intern.hh"#include "DEG_depsgraph.hh"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) |
| void | BKE_libblock_free_runtime_data (ID *id) |
| static int | id_free (Main *bmain, void *idv, int flag, const bool use_flag_from_idtag) |
| void | BKE_id_free_ex (Main *bmain, void *idv, const int flag_orig, 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, blender::Set< ID * > &ids_to_delete, const int extra_remapping_flags) |
| void | BKE_id_delete_ex (Main *bmain, void *idv, const int extra_remapping_flags) |
| void | BKE_id_delete (Main *bmain, void *idv) |
| size_t | BKE_id_multi_tagged_delete (Main *bmain) |
| size_t | BKE_id_multi_delete (Main *bmain, blender::Set< ID * > &ids_to_delete) |
Python Data Handling | |
| void | BKE_libblock_free_data_py (ID *id) |
Contains management of ID's for freeing & deletion.
Definition in file lib_id_delete.cc.
| void BKE_id_delete | ( | Main * | bmain, |
| void * | idv ) |
Properly delete a single ID from given bmain database.
Definition at line 395 of file lib_id_delete.cc.
References BKE_id_delete_ex().
Referenced by blender::bke::asset_edit_id_delete(), blender::bke::asset_reload(), BKE_blendfile_read_make_empty(), BKE_brush_delete(), BKE_collection_delete(), BKE_lib_override_library_create_from_tag(), blo_read_file_internal(), BLO_update_defaults_startup_blend(), blender::ed::object::clear_override_library_exec(), blender::ed::object::collection_unlink_exec(), blender::ed::object::convert_font_to_grease_pencil(), blender::bke::tests::ArmatureDeformTestBase::curves_test(), ED_scene_delete(), blender::bke::tests::ArmatureDeformTestBase::edit_mesh_test(), blender::bke::tests::ArmatureDeformTestBase::grease_pencil_test(), blender::bke::blendfile::PartialWriteContext::id_delete(), blender::ed::outliner::id_override_library_clear_single_process(), Freestyle::PythonInterpreter::interpretFile(), blender::bke::tests::ArmatureDeformTestBase::mesh_test(), blender::ed::outliner::outliner_object_delete_fn(), override_idtemplate_clear_exec(), blender::ed::vse::sequencer_clipboard_paste_exec(), blender::bke::tests::TEST(), text_unlink_exec(), blender::ed::object::volume_import_exec(), and blender::bke::blendfile::PartialWriteContext::write().
| void BKE_id_delete_ex | ( | Main * | bmain, |
| void * | idv, | ||
| const int | extra_remapping_flags ) |
Definition at line 386 of file lib_id_delete.cc.
References BLI_assert_msg, id_delete(), and ID_TAG_NO_MAIN.
Referenced by BKE_id_delete().
| void BKE_id_free | ( | Main * | bmain, |
| void * | idv ) |
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 223 of file lib_id_delete.cc.
References BKE_id_free_ex().
Referenced by add_nodes(), arrayModifier_doArray(), blender::ed::object::bake(), BKE_crazyspace_build_sculpt(), BKE_crazyspace_get_first_deform_matrices_editbmesh(), BKE_grease_pencil_nomain_to_grease_pencil(), BKE_id_free_us(), BKE_image_merge(), BKE_lib_override_library_resync(), BKE_materials_exit(), BKE_mesh_eval_geometry(), BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(), BKE_mesh_nomain_to_mesh(), BKE_object_free_caches(), BKE_object_free_derived_caches(), BKE_object_to_curve_clear(), BKE_object_to_mesh_clear(), BKE_pointcloud_nomain_to_pointcloud(), BKE_sculpt_get_first_deform_matrices(), BKE_workspace_layout_remove(), BKE_workspace_remove(), bpy_bmesh_from_object(), BPy_GeometrySet_dealloc(), BPy_InlineShaderNodes_dealloc(), C_BVHTree_FromObject(), canvas_copyMesh(), blender::bke::CurveComponent::clear(), blender::bke::GreasePencilComponent::clear(), blender::bke::MeshComponent::clear(), blender::bke::PointCloudComponent::clear(), blender::bke::VolumeComponent::clear(), blender::ed::transform::SnapCache_EditMesh::clear(), blender::io::obj::OBJMesh::clear(), cloth_build_springs(), construct_param_handle_subsurfed(), blender::ed::object::convert_curves_legacy_to_grease_pencil(), blender::ed::object::convert_font_to_curves(), blender::ed::object::convert_font_to_grease_pencil(), blender::ed::object::convert_grease_pencil_to_mesh(), blender::io::ply::convert_ply_to_mesh(), blender::ed::object::create_applied_mesh_for_modifier(), blender::ed::animrig::create_pose_asset_user_library(), deform_verts(), deform_verts(), distribute_particles_on_dm(), do_hair_dynamics(), blender::io::alembic::ABCCurveWriter::do_write(), blender::io::usd::USDCurvesWriter::do_write(), dynamicPaint_brushMeshCalculateVelocity(), dynamicPaint_Modifier_apply(), dynamicPaint_Modifier_free_runtime(), dynamicPaint_paintMesh(), ED_workspace_delete(), blender::bke::editbmesh_calc_modifiers(), blender::nodes::materialx::export_to_materialx(), blender::ed::greasepencil::fill_strokes(), final_skin(), fluid_modifier_freeEffector(), fluid_modifier_freeFlow(), free_data(), free_data(), blender::io::alembic::ABCGenericMeshWriter::free_export_mesh(), blender::io::alembic::ABCMetaballWriter::free_export_mesh(), blender::io::usd::USDGenericMeshWriter::free_export_mesh(), blender::io::usd::USDMetaballWriter::free_export_mesh(), blender::io::usd::USDTextWriter::free_export_mesh(), blender::ed::sculpt_paint::trim::free_geometry(), free_hair(), blender::bke::free_mesh_eval(), free_object_to_mesh(), geometry_extract_apply(), blender::compositor::get_mask_raster_handles(), GPU_material_from_nodetree(), knifeproject_poly_from_object(), lib_override_library_main_resync_on_library_indirect_level(), lineart_geometry_object_load(), blender::io::ply::load_plydata(), blender::geometry::boolean::mesh_boolean_float(), blender::bke::mesh_calc_modifiers(), mesh_new_from_curve_type_object(), mesh_new_from_mesh_object_with_layers(), mesh_remove_doubles_on_axis(), blender::bke::tests::ArmatureDeformTestBase::mesh_test(), mesh_wrapper_ensure_subdivision(), mirror_apply_on_axis(), mirrorModifier__doMirror(), blender::ed::object::modifier_apply_shape(), modify_mesh(), modify_mesh(), 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(), blender::ed::object::object_force_modifier_update_for_bind(), paint_mask_slice_exec(), poselib_blend_free(), blender::io::usd::process_usdz_textures(), psys_thread_context_init_distribute(), blender::ed::object::quadriflow_start_job(), RE_bake_normal_world_to_tangent(), RE_bake_pixels_populate_from_objects(), RE_multires_bake_images(), read_libblock(), remap_hair_emitter(), blender::ed::object::remesh_symmetry_bisect(), blender::ed::object::remesh_symmetry_mirror(), blender::seq::seq_render_mask(), blender::ed::space_node::shader_preview_free(), blender::ed::sculpt_paint::store_mesh_from_eval(), blender::ed::geometry::store_result_geometry(), subdivide_edit_mesh(), blender::bke::tests::PaintBVHTest::TearDown(), blender::ed::sculpt_paint::tests::MeshTests::TearDown(), blender::ed::sculpt_paint::undo::tests::SculptUndoTest::TearDown(), blender::animrig::tests::TEST(), blender::bke::greasepencil::tests::TEST(), blender::bke::greasepencil::tests::TEST(), blender::bke::greasepencil::tests::TEST(), blender::bke::tests::TEST(), blender::bke::tests::TEST(), blender::ed::greasepencil::tests::TEST(), blender::ed::greasepencil::tests::TEST(), blender::ed::greasepencil::tests::TEST(), blender::ed::greasepencil::tests::TEST(), blender::ed::greasepencil::tests::TEST(), blender::animrig::tests::TEST_F(), blender::animrig::tests::TEST_F(), blender::bke::tests::TEST_F(), blender::ed::animation::tests::TEST_F(), blender::bke::bake::try_load_curves(), blender::bke::bake::try_load_grease_pencil(), blender::bke::bake::try_load_mesh(), blender::bke::bake::try_load_pointcloud(), undomesh_free_data(), blender::ed::sculpt_paint::trim::update_normals(), blender::ed::object::voxel_remesh_exec(), blender::bke::tests::IDSubDataTestData::~IDSubDataTestData(), blender::eevee::LookdevWorld::~LookdevWorld(), blender::eevee::MaterialModule::~MaterialModule(), and blender::eevee::World::~World().
| void BKE_id_free_ex | ( | Main * | bmain, |
| void * | idv, | ||
| int | flag_orig, | ||
| bool | use_flag_from_idtag ) |
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 ID_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_orig | 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 data-block, even if some overriding ones are passed in flag parameter. |
Definition at line 197 of file lib_id_delete.cc.
References BKE_layer_collection_resync_allow(), BKE_layer_collection_resync_forbid(), BKE_main_collection_sync_remap(), ELEM, GS, id_free(), ID_GR, ID_OB, ID_SCE, LIB_ID_FREE_NO_MAIN, and name.
Referenced by BKE_id_free(), BKE_lib_override_library_update(), BKE_main_clear(), and blender::ed::sculpt_paint::greasepencil::PaintOperation::toggle_fill_guides_brush_off().
| void BKE_id_free_us | ( | Main * | bmain, |
| void * | idv ) |
Not really a freeing function by itself, it decrements user-count of given id, and only frees it if it reaches 0.
Definition at line 228 of file lib_id_delete.cc.
References BKE_id_free(), BKE_libblock_unlink(), BKE_library_main_rebuild_hierarchy(), GS, ID_IS_LINKED, ID_LI, ID_OB, id_us_clear_real(), and id_us_min().
Referenced by blender::ed::space_node::add_node_group_asset(), animchannels_delete_exec(), BKE_object_shapekey_free(), collection_object_remove_no_gobject_hash(), ED_workspace_delete(), gpencil_layer_remove_exec(), blender::io::usd::import_endjob(), import_endjob(), and WM_drag_free_imported_drag_ID().
| size_t BKE_id_multi_delete | ( | Main * | bmain, |
| blender::Set< ID * > & | ids_to_delete ) |
Properly delete all IDs from ids_to_delete, from 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 413 of file lib_id_delete.cc.
References id_delete().
Referenced by BKE_blendfile_link_pack(), blendfile_relocate_postprocess_cleanup(), and bpy_batch_remove().
| size_t BKE_id_multi_tagged_delete | ( | Main * | bmain | ) |
Properly delete all IDs tagged with ID_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 400 of file lib_id_delete.cc.
References blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, id_delete(), ID_TAG_DOIT, and ID::tag.
Referenced by BKE_blendfile_append(), BKE_lib_override_library_delete(), bpy_orphans_purge(), lib_override_cleanup_after_resync(), lib_override_library_main_resync_on_library_indirect_level(), lib_override_library_resync(), blender::ed::object::object_delete_exec(), blender::ed::outliner::outliner_batch_delete_object_hierarchy(), blender::ed::outliner::outliner_id_delete_invoke(), blender::ed::outliner::outliner_id_operation_exec(), blender::ed::outliner::outliner_lib_operation_exec(), blender::ed::outliner::outliner_orphans_purge_exec(), and blender::bke::blendfile::PartialWriteContext::remove_unused().
| void BKE_libblock_free_data | ( | ID * | id, |
| bool | do_id_user ) |
Free generic ID data, including the runtime and animation data, but not the python data.
Definition at line 48 of file lib_id_delete.cc.
References BKE_animdata_free(), BKE_asset_metadata_free(), BKE_lib_override_library_free(), BKE_libblock_free_runtime_data(), IDP_FreePropertyContent_ex(), and MEM_freeN().
Referenced by BKE_collection_free_data(), BKE_object_free_derived_caches(), blender::deg::deg_free_eval_copy_datablock(), id_free(), blender::bke::node_tree_free_embedded_tree(), blender::bke::ntree_free_data(), particle_settings_free_local(), prefetch_freejob(), preview_id_copy_free(), and wm_file_read_setup_wm_use_new().
| void BKE_libblock_free_data_py | ( | ID * | id | ) |
Low-level ID freeing functions.
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 422 of file lib_id_delete.cc.
References BPY_DECREF_RNA_INVALIDATE(), BPY_id_release(), and UNUSED_VARS.
Referenced by blender::deg::deg_free_eval_copy_datablock(), id_free(), blender::bke::node_tree_free_embedded_tree(), scene_free_data(), and wm_file_read_setup_wm_use_new().
| void BKE_libblock_free_datablock | ( | ID * | id, |
| int | flag ) |
Free IDtype-specific data (does not free generic ID data, use BKE_libblock_free_data for that).
Definition at line 79 of file lib_id_delete.cc.
References BKE_idtype_get_info_from_id(), BLI_assert_msg, and IDTypeInfo::free_data.
Referenced by BKE_object_free_derived_caches(), blender::deg::deg_free_eval_copy_datablock(), id_free(), particle_settings_free_local(), prefetch_freejob(), preview_id_copy_free(), blender::animrig::tests::ArmatureBoneCollections::TearDown(), blender::animrig::tests::ArmatureBoneCollectionsLiboverrides::TearDown(), and blender::animrig::tests::ArmatureBoneCollectionsTestList::TearDown().
| void BKE_libblock_free_runtime_data | ( | ID * | id | ) |
Only free generic runtime data (ID::runtime).
In most cases BKE_libblock_free_data handles this, but in rare cases (currently in readfile, when freeing linked ID placeholders), it is necessary.
Definition at line 93 of file lib_id_delete.cc.
References BLO_readfile_id_runtime_data_free().
Referenced by BKE_libblock_free_data(), blender::bke::node_tree_free_tree(), and read_library_linked_ids().
|
static |
Definition at line 259 of file lib_id_delete.cc.
References blender::bke::id::IDRemapper::add(), blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::begin(), BKE_key_from_id(), BKE_layer_collection_resync_allow(), BKE_layer_collection_resync_forbid(), BKE_libblock_relink_multiple(), BKE_libblock_remap_multiple_locked(), BKE_library_main_rebuild_hierarchy(), BKE_main_collection_sync_remap(), BKE_main_lists_get(), BKE_main_lock(), BKE_main_namemap_remove_id(), BKE_main_unlock(), BLI_remlink(), blender::bke::id::IDRemapper::clear(), blender::Vector< T, InlineBufferCapacity, Allocator >::clear(), blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::contains(), blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::end(), FOREACH_MAIN_LISTBASE_ID_BEGIN, FOREACH_MAIN_LISTBASE_ID_END, GS, i, Key::id, Library::id, ID_FAKE_USERS, id_free(), ID_IS_LINKED, ID_LI, ID_REMAP_FORCE_INTERNAL_RUNTIME_POINTERS, ID_REMAP_FORCE_NEVER_NULL_USAGE, ID_REMAP_SKIP_USER_CLEAR, ID_REMAP_STORE_NEVER_NULL_USAGE, ID_REMAP_TYPE_CLEANUP, ID_TAG_NO_MAIN, Main::is_memfile_undo_written, ID::lib, LIB_ID_FREE_NO_MAIN, LIB_ID_FREE_NO_UI_USER, LIB_ID_FREE_NO_USER_REFCOUNT, blender::bke::library::main_cleanup_parent_archives(), blender::bke::id::IDRemapper::never_null_users(), Main::shapekeys, and blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::size().
Referenced by BKE_id_delete_ex(), BKE_id_multi_delete(), and BKE_id_multi_tagged_delete().
|
static |
Definition at line 106 of file lib_id_delete.cc.
References blender::bke::id::IDRemapper::add(), 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_id(), BKE_main_unlock(), BLI_assert, BLI_remlink(), DEG_id_type_tag(), flag, free_notifier_reference_cb, GS, Key::id, id_free(), ID_REMAP_SKIP_USER_CLEAR, ID_TAG_NO_MAIN, ID_TAG_NO_USER_REFCOUNT, ID_TAG_NOT_ALLOCATED, 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, MEM_freeN(), remap_editor_id_reference_cb, and which_libbase().
Referenced by BKE_id_free_ex(), id_delete(), and id_free().