Blender V5.0
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"
29#include "BLI_sys_types.h"
30#include "BLI_utility_mixins.hh"
31#include "BLI_vector_set.hh"
32
33#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag. */
34
35struct BLI_mempool;
36struct BlendThumbnail;
37struct GHash;
38struct GSet;
39struct ID;
40struct IDNameLib_Map;
41struct ImBuf;
42struct Library;
43struct MainLock;
44struct ReportList;
45struct UniqueName_Map;
46
53 char rect[0];
54};
55
72
85
124
131 /* NOTE: we could add more mappings when needed (e.g. from session uid?). */
132
133 short flag;
134
135 /* Private... */
137};
138
139enum {
142};
143
145 /*
146 * File working colorspace for all scene linear colors.
147 * The name is only for the user interface and is not a unique identifier, the matrix is
148 * the XYZ colorspace is the source of truth.
149 * */
150 char scene_linear_name[64 /*MAX_COLORSPACE_NAME*/] = "";
152
153 /*
154 * A colorspace, view or display was not found, which likely means the OpenColorIO config
155 * used to create this blend file is missing.
156 */
158};
159
166 std::shared_ptr<blender::VectorSet<Main *>> split_mains = {};
179 char filepath[/*FILE_MAX*/ 1024] = "";
180 /* See BLENDER_FILE_VERSION, BLENDER_FILE_SUBVERSION. */
181 short versionfile = 0;
182 short subversionfile = 0;
183 /* See BLENDER_FILE_MIN_VERSION, BLENDER_FILE_MIN_SUBVERSION. */
184 short minversionfile = 0;
193
199 bool is_asset_edit_file = false;
200
204 char build_hash[16] = {};
206 bool recovered = false;
219
225
231 bool is_read_invalid = false;
232
239 bool is_global_main = false;
240
254
260
269 Library *curlib = nullptr;
270
271 /*
272 * Colorspace information for this file.
273 */
275
276 /* List bases for all ID types, containing all IDs for the current #Main. */
277
323
330
333
336
342
343 MainLock *lock = nullptr;
344
345 /* Constructors and destructors. */
346 Main();
347 ~Main();
348};
349
366void BKE_main_clear(Main &bmain);
371void BKE_main_free(Main *bmain);
372
396
414void BKE_main_merge(Main *bmain_dst, Main **r_bmain_src, MainMergeReport &reports);
415
419bool BKE_main_is_empty(Main *bmain);
420
424bool BKE_main_has_issues(const Main *bmain);
425
430bool BKE_main_needs_overwrite_confirm(const Main *bmain);
431
432void BKE_main_lock(Main *bmain);
433void BKE_main_unlock(Main *bmain);
434
436void BKE_main_relations_create(Main *bmain, short flag);
437void BKE_main_relations_free(Main *bmain);
439void BKE_main_relations_tag_set(Main *bmain, eMainIDRelationsEntryTags tag, bool value);
440
447GSet *BKE_main_gset_create(Main *bmain, GSet *gset);
448
449/* Temporary runtime API to allow re-using local (already appended)
450 * IDs instead of appending a new copy again. */
451
453
465 MainLibraryWeakReferenceMap *library_weak_reference_mapping) ATTR_NONNULL();
476 MainLibraryWeakReferenceMap *library_weak_reference_mapping,
477 const char *library_filepath,
478 const char *library_id_name) ATTR_NONNULL();
489 MainLibraryWeakReferenceMap *library_weak_reference_mapping,
490 const char *library_filepath,
491 const char *library_id_name,
492 ID *new_id) ATTR_NONNULL();
508 MainLibraryWeakReferenceMap *library_weak_reference_mapping,
509 const char *library_filepath,
510 const char *library_id_name,
511 ID *old_id,
512 ID *new_id) ATTR_NONNULL();
523 MainLibraryWeakReferenceMap *library_weak_reference_mapping,
524 const char *library_filepath,
525 const char *library_id_name,
526 ID *old_id) ATTR_NONNULL();
527
533 const char *library_filepath,
534 const char *library_id_name);
535
541 const char *library_filepath,
542 const char *library_id_name);
543
544/* *** Generic utils to loop over whole Main database. *** */
545
546#define FOREACH_MAIN_LISTBASE_ID_BEGIN(_lb, _id) \
547 { \
548 ID *_id_next = static_cast<ID *>((_lb)->first); \
549 for ((_id) = _id_next; (_id) != nullptr; (_id) = _id_next) { \
550 _id_next = static_cast<ID *>((_id)->next);
551
552#define FOREACH_MAIN_LISTBASE_ID_END \
553 } \
554 } \
555 ((void)0)
556
557#define FOREACH_MAIN_LISTBASE_BEGIN(_bmain, _lb) \
558 { \
559 MainListsArray _lbarray = BKE_main_lists_get(*(_bmain)); \
560 size_t _i = _lbarray.size(); \
561 while (_i--) { \
562 (_lb) = _lbarray[_i];
563
564#define FOREACH_MAIN_LISTBASE_END \
565 } \
566 } \
567 ((void)0)
568
577#define FOREACH_MAIN_ID_BEGIN(_bmain, _id) \
578 { \
579 ListBase *_lb; \
580 FOREACH_MAIN_LISTBASE_BEGIN ((_bmain), _lb) { \
581 FOREACH_MAIN_LISTBASE_ID_BEGIN (_lb, (_id))
582
583#define FOREACH_MAIN_ID_END \
584 FOREACH_MAIN_LISTBASE_ID_END; \
585 } \
586 FOREACH_MAIN_LISTBASE_END; \
587 } \
588 ((void)0)
589
599 const uint8_t *rect,
600 const int size[2]);
601
622
626const char *BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL();
637const char *BKE_main_blendfile_path_from_library(const Library &library);
638
642ListBase *which_libbase(Main *bmain, short type);
643
645using MainListsArray = std::array<ListBase *, INDEX_ID_MAX - 1>;
646
657
658#define MAIN_VERSION_FILE_ATLEAST(main, ver, subver) \
659 ((main)->versionfile > (ver) || \
660 ((main)->versionfile == (ver) && (main)->subversionfile >= (subver)))
661
662#define MAIN_VERSION_FILE_OLDER(main, ver, subver) \
663 ((main)->versionfile < (ver) || \
664 ((main)->versionfile == (ver) && (main)->subversionfile < (subver)))
665
666#define MAIN_VERSION_FILE_OLDER_OR_EQUAL(main, ver, subver) \
667 ((main)->versionfile < (ver) || \
668 ((main)->versionfile == (ver) && (main)->subversionfile <= (subver)))
669
670/* NOTE: in case versionfile is 0, this check is invalid, always return false then. This happens
671 * typically when a library is missing, by definition its data (placeholder IDs) does not need
672 * versionning anyway then. */
673#define LIBRARY_VERSION_FILE_ATLEAST(lib, ver, subver) \
674 ((lib)->runtime->versionfile == 0 || (lib)->runtime->versionfile > (ver) || \
675 ((lib)->runtime->versionfile == (ver) && (lib)->runtime->subversionfile >= (subver)))
676
684#define BLEN_THUMB_SIZE 128
685
686#define BLEN_THUMB_MEMSIZE(_x, _y) \
687 (sizeof(BlendThumbnail) + ((size_t)(_x) * (size_t)(_y)) * sizeof(int))
688
689#define BLEN_THUMB_MEMSIZE_IS_VALID(_x, _y) \
690 (((_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:987
BlendThumbnail * BKE_main_thumbnail_from_imbuf(Main *bmain, ImBuf *img)
Definition main.cc:837
ListBase * which_libbase(Main *bmain, short type)
Definition main.cc:902
void BKE_main_clear(Main &bmain)
Definition main.cc:96
void BKE_main_library_weak_reference_destroy(MainLibraryWeakReferenceMap *library_weak_reference_mapping) ATTR_NONNULL()
Definition main.cc:694
std::array< ListBase *, INDEX_ID_MAX - 1 > MainListsArray
Definition BKE_main.hh:645
@ MAINIDRELATIONS_INCLUDE_UI
Definition BKE_main.hh:141
void BKE_main_merge(Main *bmain_dst, Main **r_bmain_src, MainMergeReport &reports)
Definition main.cc:326
void BKE_main_library_weak_reference_add(ID *local_id, const char *library_filepath, const char *library_id_name)
Definition main.cc:803
bool BKE_main_needs_overwrite_confirm(const Main *bmain)
Definition main.cc:480
bool BKE_main_has_issues(const Main *bmain)
Definition main.cc:474
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:700
Main * BKE_main_new()
Definition main.cc:89
eMainIDRelationsEntryTags
Definition BKE_main.hh:87
@ MAINIDRELATIONS_ENTRY_TAGS_INPROGRESS_FROM
Definition BKE_main.hh:116
@ MAINIDRELATIONS_ENTRY_TAGS_PROCESSED_TO
Definition BKE_main.hh:95
@ MAINIDRELATIONS_ENTRY_TAGS_PROCESSED
Definition BKE_main.hh:102
@ MAINIDRELATIONS_ENTRY_TAGS_INPROGRESS
Definition BKE_main.hh:121
@ MAINIDRELATIONS_ENTRY_TAGS_DOIT
Definition BKE_main.hh:89
@ MAINIDRELATIONS_ENTRY_TAGS_PROCESSED_FROM
Definition BKE_main.hh:100
@ MAINIDRELATIONS_ENTRY_TAGS_INPROGRESS_TO
Definition BKE_main.hh:110
void BKE_main_lock(Main *bmain)
Definition main.cc:486
void BKE_main_thumbnail_create(Main *bmain)
Definition main.cc:877
void BKE_main_relations_tag_set(Main *bmain, eMainIDRelationsEntryTags tag, bool value)
Definition main.cc:600
ImBuf * BKE_main_thumbnail_to_imbuf(Main *bmain, BlendThumbnail *data)
Definition main.cc:861
const char * BKE_main_blendfile_path_from_library(const Library &library)
Definition main.cc:897
void BKE_main_free(Main *bmain)
Definition main.cc:192
void BKE_main_relations_create(Main *bmain, short flag)
Definition main.cc:551
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
Definition main.cc:887
MainLibraryWeakReferenceMap * BKE_main_library_weak_reference_create(Main *bmain) ATTR_NONNULL()
Definition main.cc:664
BlendThumbnail * BKE_main_thumbnail_from_buffer(Main *bmain, const uint8_t *rect, const int size[2])
Definition main.cc:815
ID * BKE_main_library_weak_reference_find(Main *bmain, const char *library_filepath, const char *library_id_name)
Definition main.cc:772
void BKE_main_unlock(Main *bmain)
Definition main.cc:491
bool BKE_main_is_empty(Main *bmain)
Definition main.cc:462
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:755
GSet * BKE_main_gset_create(Main *bmain, GSet *gset)
Definition main.cc:623
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:733
void BKE_main_relations_free(Main *bmain)
Definition main.cc:588
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:709
const char * BKE_main_blendfile_path_from_global()
Definition main.cc:892
#define ATTR_NONNULL(...)
struct GSet GSet
Definition BLI_ghash.h:337
unsigned int uint
#define INDEX_ID_MAX
Definition DNA_ID.h:1360
These structs are the foundation for all linked lists in the library system.
BMesh const char void * data
unsigned long long int uint64_t
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
MatBase< float, 3, 3 > float3x3
char rect[0]
Definition BKE_main.hh:53
Definition DNA_ID.h:414
char scene_linear_name[64]
Definition BKE_main.hh:150
bool is_missing_opencolorio_config
Definition BKE_main.hh:157
blender::float3x3 scene_linear_to_xyz
Definition BKE_main.hh:151
MainIDRelationsEntryItem * next
Definition BKE_main.hh:58
union MainIDRelationsEntryItem::@072362065353355346121131265061232353372304016351 id_pointer
LibraryForeachIDCallbackFlag usage_flag
Definition BKE_main.hh:70
MainIDRelationsEntryItem * from_ids
Definition BKE_main.hh:75
MainIDRelationsEntryItem * to_ids
Definition BKE_main.hh:77
GHash * relations_from_pointers
Definition BKE_main.hh:130
BLI_mempool * entry_items_pool
Definition BKE_main.hh:136
int num_remapped_libraries
Definition BKE_main.hh:394
ReportList * reports
Definition BKE_main.hh:375
ListBase volumes
Definition BKE_main.hh:322
ListBase lightprobes
Definition BKE_main.hh:296
ListBase brushes
Definition BKE_main.hh:302
ListBase masks
Definition BKE_main.hh:312
bool is_locked_for_linking
Definition BKE_main.hh:224
ListBase scenes
Definition BKE_main.hh:278
ListBase grease_pencils
Definition BKE_main.hh:310
UniqueName_Map * name_map_global
Definition BKE_main.hh:341
ListBase wm
Definition BKE_main.hh:307
short subversionfile
Definition BKE_main.hh:182
bool is_asset_edit_file
Definition BKE_main.hh:199
bool has_forward_compatibility_issues
Definition BKE_main.hh:192
ListBase textures
Definition BKE_main.hh:285
ListBase actions
Definition BKE_main.hh:300
UniqueName_Map * name_map
Definition BKE_main.hh:335
ListBase texts
Definition BKE_main.hh:294
ListBase meshes
Definition BKE_main.hh:281
char filepath[1024]
Definition BKE_main.hh:179
ListBase movieclips
Definition BKE_main.hh:311
Main()
Definition main.cc:49
~Main()
Definition main.cc:62
ListBase hair_curves
Definition BKE_main.hh:320
ListBase lights
Definition BKE_main.hh:288
ListBase paintcurves
Definition BKE_main.hh:305
bool is_memfile_undo_written
Definition BKE_main.hh:208
ListBase fonts
Definition BKE_main.hh:293
bool recovered
Definition BKE_main.hh:206
ListBase nodetrees
Definition BKE_main.hh:301
BlendThumbnail * blen_thumb
Definition BKE_main.hh:259
ListBase particles
Definition BKE_main.hh:303
ListBase materials
Definition BKE_main.hh:284
bool is_action_slot_to_id_map_dirty
Definition BKE_main.hh:253
ListBase linestyles
Definition BKE_main.hh:313
ListBase pointclouds
Definition BKE_main.hh:321
short minversionfile
Definition BKE_main.hh:184
uint64_t build_commit_timestamp
Definition BKE_main.hh:202
ListBase lattices
Definition BKE_main.hh:287
ListBase sounds
Definition BKE_main.hh:297
ListBase shapekeys
Definition BKE_main.hh:290
bool is_memfile_undo_flush_needed
Definition BKE_main.hh:213
ListBase libraries
Definition BKE_main.hh:279
ListBase cameras
Definition BKE_main.hh:289
IDNameLib_Map * id_map
Definition BKE_main.hh:332
bool use_memfile_full_barrier
Definition BKE_main.hh:218
ListBase armatures
Definition BKE_main.hh:299
ListBase speakers
Definition BKE_main.hh:295
MainLock * lock
Definition BKE_main.hh:343
ListBase curves
Definition BKE_main.hh:282
char build_hash[16]
Definition BKE_main.hh:204
ListBase worlds
Definition BKE_main.hh:291
short minsubversionfile
Definition BKE_main.hh:185
ListBase screens
Definition BKE_main.hh:292
short versionfile
Definition BKE_main.hh:181
ListBase workspaces
Definition BKE_main.hh:315
bool is_read_invalid
Definition BKE_main.hh:231
ListBase palettes
Definition BKE_main.hh:304
ListBase metaballs
Definition BKE_main.hh:283
bool is_global_main
Definition BKE_main.hh:239
ListBase collections
Definition BKE_main.hh:298
Library * curlib
Definition BKE_main.hh:269
std::shared_ptr< blender::VectorSet< Main * > > split_mains
Definition BKE_main.hh:166
ListBase images
Definition BKE_main.hh:286
ListBase gpencils
Definition BKE_main.hh:309
MainColorspace colorspace
Definition BKE_main.hh:274
MainIDRelations * relations
Definition BKE_main.hh:329
ListBase objects
Definition BKE_main.hh:280
ListBase cachefiles
Definition BKE_main.hh:314
uint8_t flag
Definition wm_window.cc:145