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
path: root/source
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2016-11-21 22:10:16 +0300
committerDalai Felinto <dfelinto@gmail.com>2016-11-21 22:10:19 +0300
commit3592c959e7563ad1a308a5d52d3bb261fc274153 (patch)
treeb3019905f8157741345ba42d65ddf64605c8f16e /source
parent559bd7576602e04b1895481561b054e67982351c (diff)
Layers - initial commit
This is mostly DNA + doversion and some util functions. I need to look at the layer-manager branch to see how Julian Eisel (Severin) managed to handle nested lists (required for collections). Also, since I think doversioning may get more complex as the project evolves, I started the vesioning_280.c file. And the changes in readfile.c were so that I could include into the versioning_280.c file only the DNA_* that were really needed. (if someone feels like doing a cleanup, I'm sure the other versioning_*.c files could use the same treatment)
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_scene.h7
-rw-r--r--source/blender/blenkernel/intern/scene.c137
-rw-r--r--source/blender/blenloader/CMakeLists.txt1
-rw-r--r--source/blender/blenloader/intern/readfile.c40
-rw-r--r--source/blender/blenloader/intern/readfile.h3
-rw-r--r--source/blender/blenloader/intern/versioning_280.c116
-rw-r--r--source/blender/blenloader/intern/versioning_defaults.c3
-rw-r--r--source/blender/blenloader/intern/writefile.c25
-rw-r--r--source/blender/makesdna/DNA_object_types.h4
-rw-r--r--source/blender/makesdna/DNA_scene_types.h71
10 files changed, 395 insertions, 12 deletions
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index d2152950bff..23eadf6ac84 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -44,6 +44,8 @@ struct Main;
struct Object;
struct QuicktimeCodecData;
struct RenderData;
+struct LayerCollection;
+struct SceneLayer;
struct SceneRenderLayer;
struct Scene;
struct UnitSettings;
@@ -124,6 +126,11 @@ void BKE_scene_update_tagged(struct EvaluationContext *eval_ctx, struct Main *bm
void BKE_scene_update_for_newframe(struct EvaluationContext *eval_ctx, struct Main *bmain, struct Scene *sce, unsigned int lay);
void BKE_scene_update_for_newframe_ex(struct EvaluationContext *eval_ctx, struct Main *bmain, struct Scene *sce, unsigned int lay, bool do_invisible_flush);
+struct SceneLayer *BKE_scene_add_layer(struct Scene *sce, const char *name);
+bool BKE_scene_remove_layer(struct Main *main, struct Scene *scene, struct SceneLayer *sl);
+struct LayerCollection *BKE_scene_add_collection(struct SceneLayer *sl, const char *name);
+bool BKE_scene_remove_collection(struct Main *main, struct SceneLayer *sl, struct LayerCollection *lc);
+
struct SceneRenderLayer *BKE_scene_add_render_layer(struct Scene *sce, const char *name);
bool BKE_scene_remove_render_layer(struct Main *main, struct Scene *scene, struct SceneRenderLayer *srl);
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 125d6962332..8a02d4e6a0a 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -155,22 +155,25 @@ static void remove_sequencer_fcurves(Scene *sce)
Scene *BKE_scene_copy(Main *bmain, Scene *sce, int type)
{
Scene *scen;
+ SceneLayer *sl, *new_sl;
SceneRenderLayer *srl, *new_srl;
FreestyleLineSet *lineset;
ToolSettings *ts;
Base *base, *obase;
if (type == SCE_COPY_EMPTY) {
- ListBase rl, rv;
+ ListBase rl, rv, sl;
scen = BKE_scene_add(bmain, sce->id.name + 2);
rl = scen->r.layers;
rv = scen->r.views;
+ sl = scen->layers;
curvemapping_free_data(&scen->r.mblur_shutter_curve);
scen->r = sce->r;
scen->r.layers = rl;
scen->r.actlay = 0;
scen->r.views = rv;
+ scen->layers = sl;
scen->unit = sce->unit;
scen->physics_settings = sce->physics_settings;
scen->gm = sce->gm;
@@ -244,6 +247,36 @@ Scene *BKE_scene_copy(Main *bmain, Scene *sce, int type)
}
new_srl = new_srl->next;
}
+
+ BLI_duplicatelist(&(scen->layers), &(sce->layers));
+ new_sl = scen->layers.first;
+ for (sl = sce->layers.first; sl; sl->next) {
+ sl->obedit = NULL;
+
+ BLI_duplicatelist(&(new_sl->base), &(sl->base));
+
+ obase = sl->base.first;
+ base = new_sl->base.first;
+
+ while (base) {
+ id_us_plus(&base->object->id);
+ if (obase == sl->basact) new_sl->basact = base;
+
+ obase = obase->next;
+ base = base->next;
+ }
+
+ BLI_duplicatelist(&(new_sl->collections), &(sl->collections));
+
+ LayerCollection *lcn = new_sl->collections.first;
+ for (LayerCollection *lc = sl->collections.first; lc; lc = lc->next) {
+ BLI_duplicatelist(&(lcn->elements), &(lc->elements));
+ BLI_duplicatelist(&(lcn->overrides), &(lc->overrides));
+ lcn = lcn->next;
+ }
+
+ new_sl = new_sl->next;
+ }
}
/* copy color management settings */
@@ -372,6 +405,7 @@ void BKE_scene_make_local(Main *bmain, Scene *sce, const bool lib_local)
/** Free (or release) any data used by this scene (does not free the scene itself). */
void BKE_scene_free(Scene *sce)
{
+ SceneLayer *sl;
SceneRenderLayer *srl;
BKE_animdata_free((ID *)sce, false);
@@ -462,6 +496,18 @@ void BKE_scene_free(Scene *sce)
BKE_previewimg_free(&sce->preview);
curvemapping_free_data(&sce->r.mblur_shutter_curve);
+
+ for (sl = sce->layers.first; sl; sl = sl->next) {
+ sl->basact = NULL;
+ BLI_freelistN(&sl->base);
+
+ for (LayerCollection *lc = sl->collections.first; lc; lc = lc->next) {
+ BLI_freelistN(&lc->elements);
+ BLI_freelistN(&lc->overrides);
+ }
+ BLI_freelistN(&sl->collections);
+ }
+ BLI_freelistN(&sce->layers);
}
void BKE_scene_init(Scene *sce)
@@ -792,6 +838,8 @@ void BKE_scene_init(Scene *sce)
sce->toolsettings->gpencil_v2d_align = GP_PROJECT_VIEWSPACE;
sce->toolsettings->gpencil_seq_align = GP_PROJECT_VIEWSPACE;
sce->toolsettings->gpencil_ima_align = GP_PROJECT_VIEWSPACE;
+
+ BKE_scene_add_layer(sce, NULL);
}
Scene *BKE_scene_add(Main *bmain, const char *name)
@@ -1986,6 +2034,93 @@ void BKE_scene_update_for_newframe_ex(EvaluationContext *eval_ctx, Main *bmain,
#endif
}
+LayerCollection *BKE_scene_add_collection(SceneLayer *sl, const char *name)
+{
+ LayerCollection *lc;
+
+ lc = MEM_callocN(sizeof(LayerCollection), "new layer collection");
+ BLI_strncpy(lc->name, name, sizeof(lc->name));
+ BLI_uniquename(&sl->collections, lc, DATA_("Collection"), '.', offsetof(LayerCollection, name), sizeof(lc->name));
+ BLI_addtail(&sl->collections, lc);
+
+ return lc;
+}
+
+
+bool BKE_scene_remove_collection(Main *bmain, SceneLayer *sl, LayerCollection *lc)
+{
+ const int act = BLI_findindex(&sl->collections, lc);
+ if (act == -1) {
+ return false;
+ }
+ else if ( (sl->collections.first == sl->collections.last) &&
+ (sl->collections.first == lc))
+ {
+ /* ensure 1 layer is kept */
+ return false;
+ }
+
+ BLI_remlink(&sl->collections, lc);
+
+ BLI_freelistN(&lc->elements);
+ BLI_freelistN(&lc->overrides);
+ MEM_freeN(lc);
+
+ /* TODO only change active_collection if necessary */
+ sl->active_collection = 0;
+
+ return true;
+}
+
+/* return default layer */
+SceneLayer *BKE_scene_add_layer(Scene *sce, const char *name)
+{
+ SceneLayer *sl;
+
+ if (!name)
+ name = DATA_("SceneLayer");
+
+ sl = MEM_callocN(sizeof(SceneLayer), "new scene layer");
+ BLI_strncpy(sl->name, name, sizeof(sl->name));
+ BLI_uniquename(&sce->layers, sl, DATA_("Layer"), '.', offsetof(SceneLayer, name), sizeof(sl->name));
+
+ /* Initial collection */
+ BKE_scene_add_collection(sl, "Collection");
+ BLI_addtail(&sce->layers, sl);
+ return sl;
+}
+
+bool BKE_scene_remove_layer(Main *bmain, Scene *scene, SceneLayer *sl)
+{
+ const int act = BLI_findindex(&scene->layers, sl);
+ if (act == -1) {
+ return false;
+ }
+ else if ( (scene->layers.first == scene->layers.last) &&
+ (scene->layers.first == sl))
+ {
+ /* ensure 1 layer is kept */
+ return false;
+ }
+
+ BLI_remlink(&scene->layers, sl);
+
+ BLI_freelistN(&sl->base);
+
+ for (LayerCollection *lc = sl->collections.first; lc; lc = lc->next) {
+ BLI_freelistN(&lc->elements);
+ BLI_freelistN(&lc->overrides);
+ }
+
+ BLI_freelistN(&sl->collections);
+ MEM_freeN(sl);
+
+ /* TODO only change active_layer if necessary */
+ scene->active_layer = 0;
+
+ return true;
+}
+
/* return default layer, also used to patch old files */
SceneRenderLayer *BKE_scene_add_render_layer(Scene *sce, const char *name)
{
diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt
index 8cb9ef837b2..e40692f4a88 100644
--- a/source/blender/blenloader/CMakeLists.txt
+++ b/source/blender/blenloader/CMakeLists.txt
@@ -53,6 +53,7 @@ set(SRC
intern/versioning_250.c
intern/versioning_260.c
intern/versioning_270.c
+ intern/versioning_280.c
intern/versioning_defaults.c
intern/versioning_legacy.c
intern/writefile.c
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 677c90051f7..3831bf92d17 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -5234,6 +5234,7 @@ static void lib_link_scene(FileData *fd, Main *main)
Scene *sce;
Base *base, *next;
Sequence *seq;
+ SceneLayer *sl;
SceneRenderLayer *srl;
FreestyleModuleConfig *fmc;
FreestyleLineSet *fls;
@@ -5359,6 +5360,22 @@ static void lib_link_scene(FileData *fd, Main *main)
sce->nodetree->id.lib = sce->id.lib;
composite_patch(sce->nodetree, sce);
}
+
+ for (sl = sce->layers.first; sl; sl = sl->next) {
+ for (base = sl->base.first; base; base = next) {
+ next = base->next;
+
+ base->object = newlibadr_us(fd, sce->id.lib, base->object);
+
+ if (base->object == NULL) {
+ blo_reportf_wrap(fd->reports, RPT_WARNING, TIP_("LIB: object lost from scene: '%s'"),
+ sce->id.name + 2);
+ BLI_remlink(&sl->base, base);
+ if (base == sl->basact) sl->basact = NULL;
+ MEM_freeN(base);
+ }
+ }
+ }
for (srl = sce->r.layers.first; srl; srl = srl->next) {
srl->mat_override = newlibadr_us(fd, sce->id.lib, srl->mat_override);
@@ -5486,6 +5503,7 @@ static void direct_link_scene(FileData *fd, Scene *sce)
Sequence *seq;
MetaStack *ms;
RigidBodyWorld *rbw;
+ SceneLayer *sl;
SceneRenderLayer *srl;
sce->theDag = NULL;
@@ -5719,6 +5737,20 @@ static void direct_link_scene(FileData *fd, Scene *sce)
sce->preview = direct_link_preview_image(fd, sce->preview);
direct_link_curvemapping(fd, &sce->r.mblur_shutter_curve);
+
+ link_list(fd, &(sce->layers));
+
+ for (sl = sce->layers.first; sl; sl = sl->next) {
+ sl->obedit = NULL;
+ link_list(fd, &(sl->base));
+ sl->basact = newdataadr(fd, sl->basact);
+ link_list(fd, &(sl->collections));
+
+ for (LayerCollection *lc = sl->collections.first; lc; lc = lc->next) {
+ link_list(fd, &(lc->elements));
+ link_list(fd, &(lc->overrides));
+ }
+ }
}
/* ************ READ WM ***************** */
@@ -7959,6 +7991,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
blo_do_versions_250(fd, lib, main);
blo_do_versions_260(fd, lib, main);
blo_do_versions_270(fd, lib, main);
+ blo_do_versions_280(fd, lib, main);
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
/* WATCH IT 2!: Userdef struct init see do_versions_userdef() above! */
@@ -8988,6 +9021,7 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob)
static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
{
Base *base;
+ SceneLayer *sl;
SceneRenderLayer *srl;
FreestyleModuleConfig *module;
FreestyleLineSet *lineset;
@@ -9054,6 +9088,12 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
}
expand_doit(fd, mainvar, sce->clip);
+
+ for (sl = sce->layers.first; sl; sl = sl->next) {
+ for (base = sl->base.first; base; base = base->next) {
+ expand_doit(fd, mainvar, base->object);
+ }
+ }
}
static void expand_camera(FileData *fd, Main *mainvar, Camera *ca)
diff --git a/source/blender/blenloader/intern/readfile.h b/source/blender/blenloader/intern/readfile.h
index 7719aaa2b0d..06d4c903382 100644
--- a/source/blender/blenloader/intern/readfile.h
+++ b/source/blender/blenloader/intern/readfile.h
@@ -34,6 +34,8 @@
#define __READFILE_H__
#include "zlib.h"
+#include "DNA_sdna_types.h"
+#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h" /* for ReportType */
struct OldNewMap;
@@ -169,6 +171,7 @@ void blo_do_versions_pre250(struct FileData *fd, struct Library *lib, struct Mai
void blo_do_versions_250(struct FileData *fd, struct Library *lib, struct Main *main);
void blo_do_versions_260(struct FileData *fd, struct Library *lib, struct Main *main);
void blo_do_versions_270(struct FileData *fd, struct Library *lib, struct Main *main);
+void blo_do_versions_280(struct FileData *fd, struct Library *lib, struct Main *main);
#endif
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
new file mode 100644
index 00000000000..3353a6df000
--- /dev/null
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -0,0 +1,116 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ *
+ */
+
+/** \file blender/blenloader/intern/versioning_280.c
+ * \ingroup blenloader
+ */
+
+/* for MinGW32 definition of NULL, could use BLI_blenlib.h instead too */
+#include <stddef.h>
+
+/* allow readfile to use deprecated functionality */
+#define DNA_DEPRECATED_ALLOW
+
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_genfile.h"
+
+#include "BKE_main.h"
+#include "BKE_scene.h"
+
+#include "BLI_listbase.h"
+#include "BLI_string.h"
+
+#include "BLO_readfile.h"
+
+#include "readfile.h"
+
+#include "MEM_guardedalloc.h"
+
+void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
+{
+ if (!DNA_struct_elem_find(fd->filesdna, "Scene", "ListBase", "layers")) {
+ for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
+ SceneLayer *layer = MEM_callocN(sizeof(SceneLayer), "initial scene layer");
+ LayerCollection *collections[20] = {NULL};
+ scene->active_layer = 0;
+
+ BLI_addhead(&scene->layers, layer);
+ int lay_used = 0;
+
+ for (int i = 0; i < 20; i++) {
+ LayerCollection *collection = MEM_callocN(sizeof(LayerCollection), "doversion layer collections");
+ collection->flag = COLLECTION_SELECTABLE;
+
+ if (scene->lay & (1 << i)) {
+ collection->flag |= COLLECTION_VISIBLE;
+ }
+
+ BLI_snprintf(collection->name, sizeof(collection->name), "%d", i);
+ collections[i] = collection;
+ }
+
+ Base *base = scene->base.first;
+ while (base) {
+ Base *base_new = MEM_dupallocN(base);
+ BLI_addtail(&layer->base, base_new);
+
+ if (base == scene->basact) {
+ layer->basact = base_new;
+ }
+
+ lay_used |= base->lay & ((1 << 20) - 1); /* ignore localview */
+
+ for (int i = 0; i < 20; i++) {
+ if ((base->lay & (1 << i)) != 0) {
+ LinkData *link = MEM_callocN(sizeof(LinkData), "doversion linkdata");
+ link->data = base_new;
+ BLI_addtail(&collections[i]->elements, link);
+ }
+ }
+ base = base->next;
+ }
+
+ /* We should always have at least one layer, and one collection at all times */
+ if (lay_used == 0) {
+ lay_used = (1 << 0);
+ }
+
+ /* Cleanup */
+ for (int i = 0; i < 20; i++) {
+ if ((lay_used & (1 << i)) != 0) {
+ BLI_addtail(&layer->collections, collections[i]);
+ }
+ else {
+ MEM_freeN(collections[i]);
+ }
+ }
+
+ /*
+ * TODO handle existing SceneRenderLayer
+ * for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next);
+ */
+ }
+ }
+
+}
diff --git a/source/blender/blenloader/intern/versioning_defaults.c b/source/blender/blenloader/intern/versioning_defaults.c
index 01ef5d6a606..0e74c3f6170 100644
--- a/source/blender/blenloader/intern/versioning_defaults.c
+++ b/source/blender/blenloader/intern/versioning_defaults.c
@@ -25,6 +25,9 @@
* \ingroup blenloader
*/
+/* allow readfile to use deprecated functionality */
+#define DNA_DEPRECATED_ALLOW
+
#include "BLI_utildefines.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index d8097f1a50a..31e81358a38 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -2407,10 +2407,12 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
Base *base;
Editing *ed;
Sequence *seq;
+ LayerCollection *lc;
MetaStack *ms;
Strip *strip;
TimeMarker *marker;
TransformOrientation *ts;
+ SceneLayer *sl;
SceneRenderLayer *srl;
SceneRenderView *srv;
ToolSettings *tos;
@@ -2585,6 +2587,29 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
writestruct(wd, DATA, TransformOrientation, 1, ts);
}
+ /* writing scene layers to the blend file */
+ for (sl = sce->layers.first; sl; sl = sl->next) {
+ writestruct(wd, DATA, SceneLayer, 1, sl);
+
+ base = sl->base.first;
+ while (base) {
+ writestruct(wd, DATA, Base, 1, base);
+ base = base->next;
+ }
+
+ for (lc = sl->collections.first; lc; lc = lc->next) {
+ writestruct(wd, DATA, LayerCollection, 1, lc);
+
+ for (LinkData *link = lc->elements.first; link; link = link->next) {
+ writestruct(wd, DATA, LinkData, 1, link);
+ }
+
+ for (CollectionOverride *ov = lc->overrides.first; ov; ov = ov->next) {
+ writestruct(wd, DATA, CollectionOverride, 1, ov);
+ }
+ }
+ }
+
for (srl = sce->r.layers.first; srl; srl = srl->next) {
writestruct(wd, DATA, SceneRenderLayer, 1, srl);
for (fmc = srl->freestyleConfig.modules.first; fmc; fmc = fmc->next) {
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index ccde6549d9c..6306e7b69c8 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -142,8 +142,8 @@ typedef struct Object {
ListBase defbase; /* list of bDeformGroup (vertex groups) names and flag only */
ListBase modifiers; /* list of ModifierData structures */
- int mode; /* Local object mode */
- int restore_mode; /* Keep track of what mode to return to after toggling a mode */
+ int mode DNA_DEPRECATED; /* Local object mode - deprecated in 2.8 */
+ int restore_mode DNA_DEPRECATED; /* Keep track of what mode to return to after toggling a mode - deprecated in 2.8 */
/* materials */
struct Material **mat; /* material slots */
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index cf367bf3205..8e5a1203334 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -69,16 +69,59 @@ struct ColorSpace;
/* ************************************************************* */
/* Scene Data */
-/* Base - Wrapper for referencing Objects in a Scene */
+/* Base - Wrapper for referencing Objects in a SceneLayer */
typedef struct Base {
struct Base *next, *prev;
- unsigned int lay, selcol;
+ unsigned int lay DNA_DEPRECATED; /* deprecated in 2.8 */
+ unsigned int selcol;
int flag;
short sx, sy;
struct Object *object;
} Base;
/* ************************************************************* */
+
+typedef struct CollectionOverride {
+ struct CollectionOverride *next, *prev;
+ char name[64]; /* MAX_NAME */
+ /* TODO - proper data */
+} CollectionOverride;
+
+/* Layers Data */
+typedef struct LayerCollection {
+ struct LayerCollection *next, *prev;
+ char name[64]; /* MAX_NAME */
+ short flag;
+ short pad[3];
+ ListBase elements;
+ ListBase overrides;
+ /* TODO nesting */
+ /* TODO dynamic adding of elements (name based) */
+} LayerCollection;
+
+/* Render Layer */
+typedef struct SceneLayer {
+ struct SceneLayer *next, *prev;
+
+ char name[64]; /* MAX_NAME */
+
+ char engine[32]; /* render engine */
+
+ int mode; /* active object mode */
+ int restore_mode; /* Keep track of what mode to return to after toggling a mode */
+ int pad;
+ short active_collection;
+ short pad2;
+
+ ListBase base;
+ struct Base *basact; /* active base */
+ struct Object *obedit; /* name replaces old G.obedit */
+
+ ListBase collections;
+} SceneLayer;
+
+
+/* ************************************************************* */
/* Output Format Data */
typedef struct AviCodecData {
@@ -665,8 +708,8 @@ typedef struct RenderData {
rcti disprect;
/* information on different layers to be rendered */
- ListBase layers;
- short actlay;
+ ListBase layers DNA_DEPRECATED; /* deprecated in 2.8 */
+ short actlay DNA_DEPRECATED; /* deprecated in 2.8 */
/* number of mblur samples */
short mblur_samples;
@@ -748,7 +791,7 @@ typedef struct RenderData {
float unit_line_thickness; /* in pixels */
/* render engine */
- char engine[32];
+ char engine[32] DNA_DEPRECATED; /* deprecated in 2.8 */
/* Cycles baking */
struct BakeData bake;
@@ -1549,9 +1592,9 @@ typedef struct Scene {
struct Scene *set;
- ListBase base;
- struct Base *basact; /* active base */
- struct Object *obedit; /* name replaces old G.obedit */
+ ListBase base DNA_DEPRECATED;
+ struct Base *basact DNA_DEPRECATED; /* active base - deprecated in 2.8 */
+ struct Object *obedit DNA_DEPRECATED; /* name replaces old G.obedit - deprecated in 2.8 */
float cursor[3]; /* 3d cursor location */
float twcent[3]; /* center for transform widget */
@@ -1594,7 +1637,9 @@ typedef struct Scene {
void *pad1;
struct DagForest *theDag;
short dagflags;
- short pad3;
+
+ /* to be named (workflow layers, view layers, render layers, ...) */
+ short active_layer;
/* User-Defined KeyingSets */
int active_keyingset; /* index of the active KeyingSet. first KeyingSet has index 1, 'none' active is 0, 'add new' is -1 */
@@ -1628,6 +1673,9 @@ typedef struct Scene {
struct RigidBodyWorld *rigidbody_world;
struct PreviewImage *preview;
+
+ /* to be named (workflow layers, view layers, render layers, ...) */
+ ListBase layers;
} Scene;
/* **************** RENDERDATA ********************* */
@@ -2219,6 +2267,11 @@ typedef enum eGPencil_Placement_Flags {
#define USER_UNIT_OPT_SPLIT 1
#define USER_UNIT_ROT_RADIANS 2
+/* Collection */
+/* Collection->flag */
+#define COLLECTION_VISIBLE (1 << 0)
+#define COLLECTION_SELECTABLE (1 << 1)
+
#ifdef __cplusplus
}
#endif