[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