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:
authorSergey Sharybin <sergey.vfx@gmail.com>2011-11-18 11:11:54 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2011-11-18 11:11:54 +0400
commit9f0a6dca13c0debd27d7bd2a023e7d370c1374cd (patch)
tree03cf1198784a18b47d8ae2d64132a2c50e30645b /source/blender/blenkernel/intern/scene.c
parentc63873ad220c2513072c80f03f7b647aafab3196 (diff)
Added methods new and remove to scene.render.layers, so now render layers
can be created and removed from scripts.
Diffstat (limited to 'source/blender/blenkernel/intern/scene.c')
-rw-r--r--source/blender/blenkernel/intern/scene.c44
1 files changed, 40 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 8b8c974cdc8..eefc5e09dbb 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -44,6 +44,7 @@
#include "DNA_anim_types.h"
#include "DNA_group_types.h"
+#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
@@ -483,7 +484,7 @@ Scene *add_scene(const char *name)
sce->r.osa= 8;
/* note; in header_info.c the scene copy happens..., if you add more to renderdata it has to be checked there */
- scene_add_render_layer(sce);
+ scene_add_render_layer(sce, NULL);
/* game data */
sce->gm.stereoflag = STEREO_NOSTEREO;
@@ -1086,13 +1087,16 @@ void scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
}
/* return default layer, also used to patch old files */
-void scene_add_render_layer(Scene *sce)
+SceneRenderLayer *scene_add_render_layer(Scene *sce, const char *name)
{
SceneRenderLayer *srl;
// int tot= 1 + BLI_countlist(&sce->r.layers);
-
+
+ if(!name)
+ name= "RenderLayer";
+
srl= MEM_callocN(sizeof(SceneRenderLayer), "new render layer");
- strcpy(srl->name, "RenderLayer");
+ strcpy(srl->name, name);
BLI_uniquename(&sce->r.layers, srl, "RenderLayer", '.', offsetof(SceneRenderLayer, name), sizeof(srl->name));
BLI_addtail(&sce->r.layers, srl);
@@ -1100,6 +1104,38 @@ void scene_add_render_layer(Scene *sce)
srl->lay= (1<<20) -1;
srl->layflag= 0x7FFF; /* solid ztra halo edge strand */
srl->passflag= SCE_PASS_COMBINED|SCE_PASS_Z;
+
+ return srl;
+}
+
+int scene_remove_render_layer(Main *main, Scene *scene, SceneRenderLayer *srl)
+{
+ Scene *sce;
+ int act= BLI_findindex(&scene->r.layers, srl);
+
+ if(BLI_countlist(&scene->r.layers) <= 1)
+ return 0;
+
+ BLI_remlink(&scene->r.layers, srl);
+ MEM_freeN(srl);
+
+ scene->r.actlay= 0;
+
+ for(sce = main->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 1;
}
/* render simplification */