From 9f0a6dca13c0debd27d7bd2a023e7d370c1374cd Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 18 Nov 2011 07:11:54 +0000 Subject: Added methods new and remove to scene.render.layers, so now render layers can be created and removed from scripts. --- source/blender/blenkernel/intern/scene.c | 44 +++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 4 deletions(-) (limited to 'source/blender/blenkernel/intern/scene.c') 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 */ -- cgit v1.2.3