Blender V4.5
BKE_main.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4#pragma once
5
22
23#include <array>
24
25#include "DNA_listBase.h"
26
27#include "BLI_compiler_attrs.h"
28#include "BLI_sys_types.h"
29
30#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag. */
31
32struct BLI_mempool;
33struct BlendThumbnail;
34struct GHash;
35struct GSet;
36struct ID;
37struct IDNameLib_Map;
38struct ImBuf;
39struct Library;
40struct MainLock;
41struct ReportList;
42struct UniqueName_Map;
43
50 char rect[0];
51};
52
69
82
121
128 /* NOTE: we could add more mappings when needed (e.g. from session uid?). */
129
130 short flag;
131
132 /* Private... */
134};
135
136enum {
139};
140
141struct Main {
155 char filepath[/*FILE_MAX*/ 1024];
156 short versionfile, subversionfile; /* see BLENDER_FILE_VERSION, BLENDER_FILE_SUBVERSION */
165
172
176 char build_hash[16];
191
197
204
212
226
232
242
243 /* List bases for all ID types, containing all IDs for the current #Main. */
244
292
299
302
305
311
312 MainLock *lock;
313};
314
328void BKE_main_init(Main &bmain);
338void BKE_main_clear(Main &bmain);
347void BKE_main_destroy(Main &bmain);
352void BKE_main_free(Main *bmain);
353
377
395void BKE_main_merge(Main *bmain_dst, Main **r_bmain_src, MainMergeReport &reports);
396
400bool BKE_main_is_empty(Main *bmain);
401
405bool BKE_main_has_issues(const Main *bmain);
406
411bool BKE_main_needs_overwrite_confirm(const Main *bmain);
412
413void BKE_main_lock(Main *bmain);
414void BKE_main_unlock(Main *bmain);
415
417void BKE_main_relations_create(Main *bmain, short flag);
418void BKE_main_relations_free(Main *bmain);
420void BKE_main_relations_tag_set(Main *bmain, eMainIDRelationsEntryTags tag, bool value);
421
428GSet *BKE_main_gset_create(Main *bmain, GSet *gset);
429
430/* Temporary runtime API to allow re-using local (already appended)
431 * IDs instead of appending a new copy again. */
432
434
446 MainLibraryWeakReferenceMap *library_weak_reference_mapping) ATTR_NONNULL();
457 MainLibraryWeakReferenceMap *library_weak_reference_mapping,
458 const char *library_filepath,
459 const char *library_id_name) ATTR_NONNULL();
470 MainLibraryWeakReferenceMap *library_weak_reference_mapping,
471 const char *library_filepath,
472 const char *library_id_name,
473 ID *new_id) ATTR_NONNULL();
489 MainLibraryWeakReferenceMap *library_weak_reference_mapping,
490 const char *library_filepath,
491 const char *library_id_name,
492 ID *old_id,
493 ID *new_id) ATTR_NONNULL();
504 MainLibraryWeakReferenceMap *library_weak_reference_mapping,
505 const char *library_filepath,
506 const char *library_id_name,
507 ID *old_id) ATTR_NONNULL();
508
514 const char *library_filepath,
515 const char *library_id_name);
516
521 const char *library_filepath,
522 const char *library_id_name);
523
524/* *** Generic utils to loop over whole Main database. *** */
525
526#define FOREACH_MAIN_LISTBASE_ID_BEGIN(_lb, _id) \
527 { \
528 ID *_id_next = static_cast<ID *>((_lb)->first); \
529 for ((_id) = _id_next; (_id) != nullptr; (_id) = _id_next) { \
530 _id_next = static_cast<ID *>((_id)->next);
531
532#define FOREACH_MAIN_LISTBASE_ID_END \
533 } \
534 } \
535 ((void)0)
536
537#define FOREACH_MAIN_LISTBASE_BEGIN(_bmain, _lb) \
538 { \
539 MainListsArray _lbarray = BKE_main_lists_get(*(_bmain)); \
540 size_t _i = _lbarray.size(); \
541 while (_i--) { \
542 (_lb) = _lbarray[_i];
543
544#define FOREACH_MAIN_LISTBASE_END \
545 } \
546 } \
547 ((void)0)
548
557#define FOREACH_MAIN_ID_BEGIN(_bmain, _id) \
558 { \
559 ListBase *_lb; \
560 FOREACH_MAIN_LISTBASE_BEGIN ((_bmain), _lb) { \
561 FOREACH_MAIN_LISTBASE_ID_BEGIN (_lb, (_id))
562
563#define FOREACH_MAIN_ID_END \
564 FOREACH_MAIN_LISTBASE_ID_END; \
565 } \
566 FOREACH_MAIN_LISTBASE_END; \
567 } \
568 ((void)0)
569
579 const uint8_t *rect,
580 const int size[2]);
581
602
606const char *BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL();
614
618ListBase *which_libbase(Main *bmain, short type);
619
621using MainListsArray = std::array<ListBase *, INDEX_ID_MAX - 1>;
622
633
634#define MAIN_VERSION_FILE_ATLEAST(main, ver, subver) \
635 ((main)->versionfile > (ver) || \
636 ((main)->versionfile == (ver) && (main)->subversionfile >= (subver)))
637
638#define MAIN_VERSION_FILE_OLDER(main, ver, subver) \
639 ((main)->versionfile < (ver) || \
640 ((main)->versionfile == (ver) && (main)->subversionfile < (subver)))
641
642#define MAIN_VERSION_FILE_OLDER_OR_EQUAL(main, ver, subver) \
643 ((main)->versionfile < (ver) || \
644 ((main)->versionfile == (ver) && (main)->subversionfile <= (subver)))
645
646#define LIBRARY_VERSION_FILE_ATLEAST(lib, ver, subver) \
647 ((lib)->runtime->versionfile > (ver) || \
648 ((lib)->runtime->versionfile == (ver) && (lib)->runtime->subversionfile >= (subver)))
649
657#define BLEN_THUMB_SIZE 128
658
659#define BLEN_THUMB_MEMSIZE(_x, _y) \
660 (sizeof(BlendThumbnail) + ((size_t)(_x) * (size_t)(_y)) * sizeof(int))
661
662#define BLEN_THUMB_MEMSIZE_IS_VALID(_x, _y) \
663 (((_x) > 0 && (_y) > 0) && ((uint64_t)(_x) * (uint64_t)(_y) < (SIZE_MAX / (sizeof(int) * 4))))
LibraryForeachIDCallbackFlag
MainListsArray BKE_main_lists_get(Main &bmain)
Definition main.cc:969
BlendThumbnail * BKE_main_thumbnail_from_imbuf(Main *bmain, ImBuf *img)
Definition main.cc:822
ListBase * which_libbase(Main *bmain, short type)
Definition main.cc:882
void BKE_main_clear(Main &bmain)
Definition main.cc:68
void BKE_main_library_weak_reference_destroy(MainLibraryWeakReferenceMap *library_weak_reference_mapping) ATTR_NONNULL()
Definition main.cc:687
std::array< ListBase *, INDEX_ID_MAX - 1 > MainListsArray
Definition BKE_main.hh:621
void BKE_main_merge(Main *bmain_dst, Main **r_bmain_src, MainMergeReport &reports)
Definition main.cc:321
void BKE_main_library_weak_reference_add(ID *local_id, const char *library_filepath, const char *library_id_name)
Definition main.cc:788
void BKE_main_destroy(Main &bmain)
Definition main.cc:165
@ MAINIDRELATIONS_INCLUDE_UI
Definition BKE_main.hh:138
bool BKE_main_needs_overwrite_confirm(const Main *bmain)
Definition main.cc:474
bool BKE_main_has_issues(const Main *bmain)
Definition main.cc:469
ID * BKE_main_library_weak_reference_search_item(MainLibraryWeakReferenceMap *library_weak_reference_mapping, const char *library_filepath, const char *library_id_name) ATTR_NONNULL()
Definition main.cc:693
Main * BKE_main_new()
Definition main.cc:48
eMainIDRelationsEntryTags
Definition BKE_main.hh:84
@ MAINIDRELATIONS_ENTRY_TAGS_INPROGRESS_FROM
Definition BKE_main.hh:113
@ MAINIDRELATIONS_ENTRY_TAGS_PROCESSED_TO
Definition BKE_main.hh:92
@ MAINIDRELATIONS_ENTRY_TAGS_PROCESSED
Definition BKE_main.hh:99
@ MAINIDRELATIONS_ENTRY_TAGS_INPROGRESS
Definition BKE_main.hh:118
@ MAINIDRELATIONS_ENTRY_TAGS_DOIT
Definition BKE_main.hh:86
@ MAINIDRELATIONS_ENTRY_TAGS_PROCESSED_FROM
Definition BKE_main.hh:97
@ MAINIDRELATIONS_ENTRY_TAGS_INPROGRESS_TO
Definition BKE_main.hh:107
void BKE_main_lock(Main *bmain)
Definition main.cc:479
void BKE_main_thumbnail_create(Main *bmain)
Definition main.cc:862
void BKE_main_relations_tag_set(Main *bmain, eMainIDRelationsEntryTags tag, bool value)
Definition main.cc:593
ImBuf * BKE_main_thumbnail_to_imbuf(Main *bmain, BlendThumbnail *data)
Definition main.cc:846
void BKE_main_init(Main &bmain)
Definition main.cc:55
void BKE_main_free(Main *bmain)
Definition main.cc:175
void BKE_main_relations_create(Main *bmain, short flag)
Definition main.cc:544
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
Definition main.cc:872
MainLibraryWeakReferenceMap * BKE_main_library_weak_reference_create(Main *bmain) ATTR_NONNULL()
Definition main.cc:657
BlendThumbnail * BKE_main_thumbnail_from_buffer(Main *bmain, const uint8_t *rect, const int size[2])
Definition main.cc:800
ID * BKE_main_library_weak_reference_find(Main *bmain, const char *library_filepath, const char *library_id_name)
Definition main.cc:757
void BKE_main_unlock(Main *bmain)
Definition main.cc:484
bool BKE_main_is_empty(Main *bmain)
Definition main.cc:457
void BKE_main_library_weak_reference_remove_item(MainLibraryWeakReferenceMap *library_weak_reference_mapping, const char *library_filepath, const char *library_id_name, ID *old_id) ATTR_NONNULL()
Definition main.cc:740
GSet * BKE_main_gset_create(Main *bmain, GSet *gset)
Definition main.cc:616
void BKE_main_library_weak_reference_update_item(MainLibraryWeakReferenceMap *library_weak_reference_mapping, const char *library_filepath, const char *library_id_name, ID *old_id, ID *new_id) ATTR_NONNULL()
Definition main.cc:718
void BKE_main_relations_free(Main *bmain)
Definition main.cc:581
void BKE_main_library_weak_reference_add_item(MainLibraryWeakReferenceMap *library_weak_reference_mapping, const char *library_filepath, const char *library_id_name, ID *new_id) ATTR_NONNULL()
Definition main.cc:702
const char * BKE_main_blendfile_path_from_global()
Definition main.cc:877
#define ATTR_NONNULL(...)
struct GSet GSet
Definition BLI_ghash.h:337
unsigned int uint
These structs are the foundation for all linked lists in the library system.
ReportList * reports
Definition WM_types.hh:1025
BMesh const char void * data
unsigned long long int uint64_t
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
#define INDEX_ID_MAX
char rect[0]
Definition BKE_main.hh:50
Definition DNA_ID.h:404
MainIDRelationsEntryItem * next
Definition BKE_main.hh:55
union MainIDRelationsEntryItem::@263053341106070124206137216357307200115112076047 id_pointer
LibraryForeachIDCallbackFlag usage_flag
Definition BKE_main.hh:67
MainIDRelationsEntryItem * from_ids
Definition BKE_main.hh:72
MainIDRelationsEntryItem * to_ids
Definition BKE_main.hh:74
GHash * relations_from_pointers
Definition BKE_main.hh:127
BLI_mempool * entry_items_pool
Definition BKE_main.hh:133
int num_remapped_libraries
Definition BKE_main.hh:375
ReportList * reports
Definition BKE_main.hh:356
ListBase volumes
Definition BKE_main.hh:291
ListBase lightprobes
Definition BKE_main.hh:265
ListBase brushes
Definition BKE_main.hh:271
ListBase masks
Definition BKE_main.hh:281
bool is_locked_for_linking
Definition BKE_main.hh:196
ListBase scenes
Definition BKE_main.hh:245
ListBase grease_pencils
Definition BKE_main.hh:279
UniqueName_Map * name_map_global
Definition BKE_main.hh:310
ListBase wm
Definition BKE_main.hh:276
short subversionfile
Definition BKE_main.hh:156
bool is_asset_edit_file
Definition BKE_main.hh:171
bool has_forward_compatibility_issues
Definition BKE_main.hh:164
ListBase textures
Definition BKE_main.hh:252
ListBase actions
Definition BKE_main.hh:269
UniqueName_Map * name_map
Definition BKE_main.hh:304
ListBase texts
Definition BKE_main.hh:263
ListBase meshes
Definition BKE_main.hh:248
char filepath[1024]
Definition BKE_main.hh:155
ListBase movieclips
Definition BKE_main.hh:280
ListBase ipo
Definition BKE_main.hh:258
ListBase hair_curves
Definition BKE_main.hh:289
ListBase lights
Definition BKE_main.hh:255
ListBase paintcurves
Definition BKE_main.hh:274
bool is_memfile_undo_written
Definition BKE_main.hh:180
ListBase fonts
Definition BKE_main.hh:262
bool recovered
Definition BKE_main.hh:178
ListBase nodetrees
Definition BKE_main.hh:270
BlendThumbnail * blen_thumb
Definition BKE_main.hh:231
ListBase particles
Definition BKE_main.hh:272
ListBase materials
Definition BKE_main.hh:251
bool is_action_slot_to_id_map_dirty
Definition BKE_main.hh:225
Main * prev
Definition BKE_main.hh:142
ListBase linestyles
Definition BKE_main.hh:282
ListBase pointclouds
Definition BKE_main.hh:290
short minversionfile
Definition BKE_main.hh:157
uint64_t build_commit_timestamp
Definition BKE_main.hh:174
ListBase lattices
Definition BKE_main.hh:254
ListBase sounds
Definition BKE_main.hh:266
ListBase shapekeys
Definition BKE_main.hh:259
bool is_memfile_undo_flush_needed
Definition BKE_main.hh:185
ListBase libraries
Definition BKE_main.hh:246
ListBase cameras
Definition BKE_main.hh:256
IDNameLib_Map * id_map
Definition BKE_main.hh:301
bool use_memfile_full_barrier
Definition BKE_main.hh:190
ListBase armatures
Definition BKE_main.hh:268
ListBase speakers
Definition BKE_main.hh:264
MainLock * lock
Definition BKE_main.hh:312
ListBase curves
Definition BKE_main.hh:249
char build_hash[16]
Definition BKE_main.hh:176
Main * next
Definition BKE_main.hh:142
ListBase worlds
Definition BKE_main.hh:260
short minsubversionfile
Definition BKE_main.hh:157
ListBase screens
Definition BKE_main.hh:261
short versionfile
Definition BKE_main.hh:156
ListBase workspaces
Definition BKE_main.hh:284
bool is_read_invalid
Definition BKE_main.hh:203
ListBase palettes
Definition BKE_main.hh:273
ListBase metaballs
Definition BKE_main.hh:250
bool is_global_main
Definition BKE_main.hh:211
ListBase collections
Definition BKE_main.hh:267
Library * curlib
Definition BKE_main.hh:241
ListBase images
Definition BKE_main.hh:253
ListBase gpencils
Definition BKE_main.hh:278
MainIDRelations * relations
Definition BKE_main.hh:298
ListBase objects
Definition BKE_main.hh:247
ListBase cachefiles
Definition BKE_main.hh:283
uint8_t flag
Definition wm_window.cc:139