[Bf-blender-cvs] [477fc97] render-layers: Renaming RenderLayer > SceneLayer
Dalai Felinto
noreply at git.blender.org
Fri Dec 2 17:56:08 CET 2016
Commit: 477fc97bd5be09ac4389a3cde84d7a88d997540b
Author: Dalai Felinto
Date: Thu Dec 1 19:12:04 2016 +0100
Branches: render-layers
https://developer.blender.org/rB477fc97bd5be09ac4389a3cde84d7a88d997540b
Renaming RenderLayer > SceneLayer
RenderLayer was the struct for RenderResult, better not to clash namespace here. For the Python API we still stick to scene.render_layers
===================================================================
M source/blender/blenkernel/BKE_layer.h
M source/blender/blenkernel/intern/layer.c
M source/blender/blenloader/intern/versioning_280.c
M source/blender/makesdna/DNA_layer_types.h
===================================================================
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 2b95496..ea8f930 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -34,18 +34,22 @@ extern "C" {
#define TODO_LAYER_SYNC
#define TODO_LAYER_OVERRIDE
+struct Collection;
struct CollectionBase;
struct ID;
-struct RenderLayer;
+struct Main;
+struct SceneLayer;
struct Scene;
-struct RenderLayer *BKE_render_layer_add(struct Scene *scene, const char *name);
+struct SceneLayer *BKE_scene_layer_add(struct Scene *scene, const char *name);
-void BKE_render_layer_engine_set(struct RenderLayer *rl, const char *engine);
+bool BKE_scene_layer_remove(struct Main *bmain, struct Scene *scene, struct SceneLayer *sl);
-struct CollectionBase *BKE_collection_link(struct RenderLayer *rl, struct Collection *cl);
+void BKE_scene_layer_engine_set(struct SceneLayer *sl, const char *engine);
-void BKE_collection_unlink(struct RenderLayer *rl, struct CollectionBase *cb);
+struct CollectionBase *BKE_collection_link(struct SceneLayer *sl, struct Collection *cl);
+
+void BKE_collection_unlink(struct SceneLayer *sl, struct CollectionBase *cb);
void BKE_collection_override_datablock_add(struct CollectionBase *cb, const char *data_path, struct ID *id);
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 302e7ef..fc17979 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -29,16 +29,19 @@
#include "BKE_collection.h"
#include "BKE_layer.h"
+#include "BKE_main.h"
+#include "BKE_node.h"
#include "DNA_ID.h"
#include "DNA_layer_types.h"
#include "DNA_object_types.h"
+#include "DNA_node_types.h"
#include "DNA_scene_types.h"
#include "MEM_guardedalloc.h"
/* prototype */
-CollectionBase *collection_base_add(RenderLayer *rl, ListBase *lb, Collection *collection);
+CollectionBase *collection_base_add(SceneLayer *sl, ListBase *lb, Collection *collection);
/* RenderLayer */
@@ -46,46 +49,87 @@ CollectionBase *collection_base_add(RenderLayer *rl, ListBase *lb, Collection *c
* Add a new renderlayer
* by default, a renderlayer has the master collection
*/
-RenderLayer *BKE_render_layer_add(Scene *scene, const char *name)
+SceneLayer *BKE_scene_layer_add(Scene *scene, const char *name)
{
- RenderLayer *rl = MEM_callocN(sizeof(RenderLayer), "Render Layer");
- BLI_strncpy(rl->name, name, sizeof(rl->name));
+ SceneLayer *sl = MEM_callocN(sizeof(SceneLayer), "Scene Layer");
+ BLI_strncpy(sl->name, name, sizeof(sl->name));
Collection *cl = BKE_collection_master(scene);
- collection_base_add(rl, &rl->collection_bases, cl);
- return rl;
+ collection_base_add(sl, &sl->collection_bases, cl);
+ return sl;
+}
+
+bool BKE_scene_layer_remove(Main *bmain, Scene *scene, SceneLayer *sl)
+{
+ const int act = BLI_findindex(&scene->render_layers, sl);
+
+ if (act == -1) {
+ return false;
+ }
+ else if ( (scene->render_layers.first == scene->render_layers.last) &&
+ (scene->render_layers.first == sl))
+ {
+ /* ensure 1 layer is kept */
+ return false;
+ }
+
+ BLI_remlink(&scene->render_layers, sl);
+
+ BLI_freelistN(&sl->object_bases);
+ //layer_collections_free(rl, &rl->collection_bases);
+ BLI_freelistN(&sl->collection_bases);
+
+ MEM_freeN(sl);
+
+ /* TODO WORKSPACE: set active_layer to 0 */
+
+ for (Scene *sce = bmain->scene.first; sce; sce = sce->id.next) {
+ if (sce->nodetree) {
+ bNode *node;
+ for (node = sce->nodetree->nodes.first; node; node = node->next) {
+ if (node->type == CMP_NODE_R_LAYERS && (Scene *)node->id == scene) {
+ if (node->custom1 == act)
+ node->custom1 = 0;
+ else if (node->custom1 > act)
+ node->custom1--;
+ }
+ }
+ }
+ }
+
+ return true;
}
/*
* Set the render engine of a renderlayer
*/
-void BKE_render_layer_engine_set(struct RenderLayer *rl, const char *engine)
+void BKE_scene_layer_engine_set(SceneLayer *sl, const char *engine)
{
- BLI_strncpy(rl->engine, engine, sizeof(rl->engine));
+ BLI_strncpy(sl->engine, engine, sizeof(sl->engine));
}
/* ObjectBase */
-static void render_layer_object_base_unref(RenderLayer* rl, ObjectBase *base)
+static void scene_layer_object_base_unref(SceneLayer* sl, ObjectBase *base)
{
base->refcount--;
/* It only exists in the RenderLayer */
if (base->refcount == 1) {
- if (rl->basact == base) {
- rl->basact = NULL;
+ if (sl->basact == base) {
+ sl->basact = NULL;
}
}
- BLI_remlink(&rl->object_bases, base);
+ BLI_remlink(&sl->object_bases, base);
MEM_freeN(base);
}
-static ObjectBase *object_base_add(RenderLayer *rl, Object *ob)
+static ObjectBase *object_base_add(SceneLayer *sl, Object *ob)
{
ObjectBase *base = MEM_callocN(sizeof(ObjectBase), "Object Base");
base->object = ob;
- BLI_addtail(&rl->object_bases, base);
+ BLI_addtail(&sl->object_bases, base);
return base;
}
@@ -95,21 +139,21 @@ static ObjectBase *object_base_add(RenderLayer *rl, Object *ob)
* Link a collection to a renderlayer
* The collection needs to be created separately
*/
-CollectionBase *BKE_collection_link(RenderLayer *rl, Collection *cl)
+CollectionBase *BKE_collection_link(SceneLayer *sl, Collection *cl)
{
- CollectionBase *base = collection_base_add(rl, &rl->collection_bases, cl);
+ CollectionBase *base = collection_base_add(sl, &sl->collection_bases, cl);
return base;
}
-static void collection_base_free(RenderLayer *rl, CollectionBase *cb)
+static void collection_base_free(SceneLayer *sl, CollectionBase *cb)
{
for (CollectionBase *ncb = cb->collection_bases.first; ncb; ncb = ncb->next) {
for (LinkData *link = ncb->object_bases.first; link; link = link->data) {
- render_layer_object_base_unref(rl, link->data);
+ scene_layer_object_base_unref(sl, link->data);
}
BLI_freelistN(&ncb->object_bases);
- collection_base_free(rl, ncb);
+ collection_base_free(sl, ncb);
}
}
@@ -117,21 +161,21 @@ static void collection_base_free(RenderLayer *rl, CollectionBase *cb)
* Unlink a collection base from a renderlayer
* The corresponding collection is not removed from the master collection
*/
-void BKE_collection_unlink(RenderLayer *rl, CollectionBase *cb)
+void BKE_collection_unlink(SceneLayer *sl, CollectionBase *cb)
{
- collection_base_free(rl, cb);
+ collection_base_free(sl, cb);
- BLI_remlink(&rl->collection_bases, cb);
+ BLI_remlink(&sl->collection_bases, cb);
MEM_freeN(cb);
}
-static void object_base_populate(RenderLayer *rl, CollectionBase *cb, ListBase *objects)
+static void object_base_populate(SceneLayer *sl, CollectionBase *cb, ListBase *objects)
{
for (LinkData *link = objects->first; link; link = link->next) {
- ObjectBase *base = BLI_findptr(&rl->object_bases, link->data, offsetof(ObjectBase, object));
+ ObjectBase *base = BLI_findptr(&sl->object_bases, link->data, offsetof(ObjectBase, object));
if (base == NULL) {
- base = object_base_add(rl, link->data);
+ base = object_base_add(sl, link->data);
}
else {
/* only add an object once */
@@ -145,17 +189,17 @@ static void object_base_populate(RenderLayer *rl, CollectionBase *cb, ListBase *
}
}
-static void collection_base_populate(RenderLayer *rl, CollectionBase *cb, Collection *cl)
+static void collection_base_populate(SceneLayer *sl, CollectionBase *cb, Collection *cl)
{
- object_base_populate(rl, cb, &cl->objects);
- object_base_populate(rl, cb, &cl->filter_objects);
+ object_base_populate(sl, cb, &cl->objects);
+ object_base_populate(sl, cb, &cl->filter_objects);
for (Collection *ncl = cl->collections.first; ncl; ncl = ncl->next) {
- collection_base_add(rl, &cb->collection_bases, ncl);
+ collection_base_add(sl, &cb->collection_bases, ncl);
}
}
-CollectionBase *collection_base_add(RenderLayer *rl, ListBase *lb, Collection *cl)
+CollectionBase *collection_base_add(SceneLayer *sl, ListBase *lb, Collection *cl)
{
CollectionBase *cb = MEM_callocN(sizeof(CollectionBase), "Collection Base");
BLI_addtail(lb, cb);
@@ -163,7 +207,7 @@ CollectionBase *collection_base_add(RenderLayer *rl, ListBase *lb, Collection *c
cb->collection = cl;
cb->flag = COLLECTION_VISIBLE + COLLECTION_SELECTABLE + COLLECTION_FOLDED;
- collection_base_populate(rl, cb, cl);
+ collection_base_populate(sl, cb, cl);
return cb;
}
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 6982508..16ed7e4 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -79,11 +79,11 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
if (!BKE_scene_uses_blender_game(scene)) {
for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) {
- RenderLayer *rl = BKE_render_layer_add(scene, srl->name);
- BKE_render_layer_engine_set(rl, scene->r.engine);
+ SceneLayer *sl = BKE_scene_layer_add(scene, srl->name);
+ BKE_scene_layer_engine_set(sl, scene->r.engine);
if (srl->mat_override) {
- BKE_collection_override_datablock_add((CollectionBase *)rl->collection_bases.first, "material", (ID *)srl->mat_override);
+ BKE_collection_override_datablock_add((CollectionBase *)sl->collection_bases.first, "material", (ID *)srl->mat_override);
}
if (srl->light_override && BKE_scene_uses_blender_internal(scene)) {
@@ -93,12 +93,12 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
if (srl->lay != scene->lay) {
/* unlink master collection */
- BKE_collection_unlink(rl, rl->collection_bases.first);
+ BKE_collection_unlink(sl, sl->collection_bases.first);
/* add new collection bases */
for (int i = 0; i < 20; i++) {
if ((srl->lay & (1 << i)) != 0) {
- BKE_collection_link(rl, collections[i]);
+ BKE_collection_link(sl, collections[i]);
}
}
}
@@ -107,10 +107,10 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
}
}
- RenderLayer *rl = BKE_render_layer_add(scene, "Render Layer");
+ SceneLayer *sl = BKE_scene_layer_add(scene, "Render Layer");
/* In
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list