Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <mont29>2022-10-05 13:55:32 +0300
committerBastien Montagne <bastien@blender.org>2022-10-05 15:26:45 +0300
commitb47a234f98dd7e6e0b53ad96b5b4d278635874d8 (patch)
treed1bc0efb0e769ba060c472862f2b7d45a96f908b /source/blender/blenkernel/BKE_main.h
parent31a4fb42d42af66ce6436803cad6d30173f34245 (diff)
BKE_Main: Add clear separation between 'temp' mains and global main.
Blender is using more and more temporary Main data-base (historically for reading linked data, but also now when resyncing liboverrides, for temp data in asset code, etc.). This commit aims at making this a bit more formal and defined, by: * Adding a dedicated flag in Main struct to mark a Main as global. * Adding some API to replace, or temporarily swap the current global Main (`G_MAIN`) by another one. NOTE: Having to temporarily replace `G_MAIN` is a workaround for the limitation of current RNA, ideally this should be fixed in RNA itself, but for now at least having an API helps tracking those cases (since this is potentially risky operation). This work is also a preparation for more usages of temp mains in the near future (Asset Brushes and its presets system e.g. will most likely use temp mains too). Reviewed By: brecht Differential Revision: https://developer.blender.org/D15977
Diffstat (limited to 'source/blender/blenkernel/BKE_main.h')
-rw-r--r--source/blender/blenkernel/BKE_main.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index 0048ad4dde5..7c3a64f1cad 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -138,6 +138,14 @@ typedef struct Main {
*/
bool is_locked_for_linking;
+ /**
+ * True if this main is the 'GMAIN' of current Blender.
+ *
+ * \note There should always be only one global main, all others generated temporarily for
+ * various data management process must have this property set to false..
+ */
+ bool is_global_main;
+
BlendThumbnail *blen_thumb;
struct Library *curlib;
@@ -202,6 +210,12 @@ typedef struct Main {
struct MainLock *lock;
} Main;
+/**
+ * Create a new Main data-base.
+ *
+ * \note Always generate a non-global Main, use #BKE_blender_globals_main_replace to put a newly
+ * created one in `G_MAIN`.
+ */
struct Main *BKE_main_new(void);
void BKE_main_free(struct Main *mainvar);