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:
Diffstat (limited to 'source/blender/blenkernel/intern/blender.c')
-rw-r--r--source/blender/blenkernel/intern/blender.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index 947cdc0c8bf..23cf368af01 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -62,8 +62,7 @@ void BKE_blender_free(void)
/* Needs to run before main free as wm is still referenced for icons preview jobs. */
BKE_studiolight_free();
- BKE_main_free(G_MAIN);
- G_MAIN = NULL;
+ BKE_blender_globals_clear();
if (G.log.file != NULL) {
fclose(G.log.file);
@@ -146,7 +145,7 @@ void BKE_blender_globals_init(void)
U.savetime = 1;
- G_MAIN = BKE_main_new();
+ BKE_blender_globals_main_replace(BKE_main_new());
strcpy(G.ima, "//");
@@ -161,11 +160,34 @@ void BKE_blender_globals_init(void)
void BKE_blender_globals_clear(void)
{
+ if (G_MAIN == NULL) {
+ return;
+ }
+ BLI_assert(G_MAIN->is_global_main);
BKE_main_free(G_MAIN); /* free all lib data */
G_MAIN = NULL;
}
+void BKE_blender_globals_main_replace(Main *bmain)
+{
+ BLI_assert(!bmain->is_global_main);
+ BKE_blender_globals_clear();
+ bmain->is_global_main = true;
+ G_MAIN = bmain;
+}
+
+Main *BKE_blender_globals_main_swap(Main *new_gmain)
+{
+ Main *old_gmain = G_MAIN;
+ BLI_assert(old_gmain->is_global_main);
+ BLI_assert(!new_gmain->is_global_main);
+ new_gmain->is_global_main = true;
+ G_MAIN = new_gmain;
+ old_gmain->is_global_main = false;
+ return old_gmain;
+}
+
/** \} */
/* -------------------------------------------------------------------- */