Rendering from 3d view in local view or with unlocked layer was not
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Sun, 14 Mar 2010 20:24:11 +0000 (20:24 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Sun, 14 Mar 2010 20:24:11 +0000 (20:24 +0000)
working yet, now layer is passed along to render engine, changes quite
a few files because simple swapping trick no longer works with threading.

14 files changed:
source/blender/blenkernel/intern/sequencer.c
source/blender/editors/object/object_bake.c
source/blender/editors/render/render_internal.c
source/blender/editors/render/render_preview.c
source/blender/render/extern/include/RE_pipeline.h
source/blender/render/intern/include/render_types.h
source/blender/render/intern/include/renderdatabase.h
source/blender/render/intern/source/convertblender.c
source/blender/render/intern/source/envmap.c
source/blender/render/intern/source/occlusion.c
source/blender/render/intern/source/pipeline.c
source/blender/render/intern/source/rendercore.c
source/blender/render/intern/source/volume_precache.c
source/creator/creator.c

index d43747cf3f373bb0d05c330fa61007909f2ed2a9..a4a0a533545108eed857a52eb356a7fcf129ae55 100644 (file)
@@ -2181,7 +2181,7 @@ static void do_build_seq_ibuf(Scene *scene, Sequence * seq, TStripElem *se, int
                                else
                                        re= RE_NewRender(sce->id.name, RE_SLOT_VIEW);
 
-                               RE_BlenderFrame(re, sce, NULL, frame);
+                               RE_BlenderFrame(re, sce, sce->lay, NULL, frame);
 
                                RE_AcquireResultImage(re, &rres);
 
index a4f419cf996710ce93a9e21f7631c3e8a9abcbe1..9458614293f21aa6602749b97ec51af3384943d0 100644 (file)
@@ -203,7 +203,7 @@ static void bake_startjob(void *bkv, short *stop, short *do_update)
        RE_test_break_cb(bkr->re, NULL, thread_break);
        G.afbreek= 0;   /* blender_test_break uses this global */
 
-       RE_Database_Baking(bkr->re, scene, scene->r.bake_mode, bkr->actob);
+       RE_Database_Baking(bkr->re, scene, scene->r.bake_mode, bkr->actob, scene->lay);
 
        /* baking itself is threaded, cannot use test_break in threads. we also update optional imagewindow */
        bkr->tot= RE_bake_shade_all_selected(bkr->re, scene->r.bake_mode, bkr->actob, bkr->do_update);
@@ -301,7 +301,7 @@ static int bake_image_exec(bContext *C, wmOperator *op)
                RE_test_break_cb(bkr.re, NULL, thread_break);
                G.afbreek= 0;   /* blender_test_break uses this global */
 
-               RE_Database_Baking(bkr.re, scene, scene->r.bake_mode, (scene->r.bake_flag & R_BAKE_TO_ACTIVE)? OBACT: NULL);
+               RE_Database_Baking(bkr.re, scene, scene->r.bake_mode, (scene->r.bake_flag & R_BAKE_TO_ACTIVE)? OBACT: NULL, scene->lay);
 
                /* baking itself is threaded, cannot use test_break in threads  */
                BLI_init_threads(&threads, do_bake_render, 1);
index 22c4f9e729c87388c7fda2c5fd844794fa1789b5..af58f3b4ee158312cb4cfe93a693eaf28b781633 100644 (file)
@@ -405,6 +405,8 @@ static int screen_render_exec(bContext *C, wmOperator *op)
 {
        Scene *scene= CTX_data_scene(C);
        Render *re= RE_GetRender(scene->id.name, RE_SLOT_VIEW);
+       View3D *v3d= CTX_wm_view3d(C);
+       int lay= (v3d)? v3d->lay|scene->lay: scene->lay;
 
        if(re==NULL) {
                re= RE_NewRender(scene->id.name, RE_SLOT_VIEW);
@@ -412,9 +414,9 @@ static int screen_render_exec(bContext *C, wmOperator *op)
        RE_test_break_cb(re, NULL, (int (*)(void *)) blender_test_break);
 
        if(RNA_boolean_get(op->ptr, "animation"))
-               RE_BlenderAnim(re, scene, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
+               RE_BlenderAnim(re, scene, lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
        else
-               RE_BlenderFrame(re, scene, NULL, scene->r.cfra);
+               RE_BlenderFrame(re, scene, NULL, lay, scene->r.cfra);
 
        // no redraw needed, we leave state as we entered it
        ED_update_for_newframe(C, 1);
@@ -429,6 +431,7 @@ typedef struct RenderJob {
        Render *re;
        wmWindow *win;
        SceneRenderLayer *srl;
+       int lay;
        int anim;
        Image *image;
        ImageUser iuser;
@@ -531,9 +534,9 @@ static void render_startjob(void *rjv, short *stop, short *do_update)
        rj->do_update= do_update;
 
        if(rj->anim)
-               RE_BlenderAnim(rj->re, rj->scene, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
+               RE_BlenderAnim(rj->re, rj->scene, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
        else
-               RE_BlenderFrame(rj->re, rj->scene, rj->srl, rj->scene->r.cfra);
+               RE_BlenderFrame(rj->re, rj->scene, rj->srl, rj->lay, rj->scene->r.cfra);
 
 //     if(mainp)
 //             free_main(mainp);
@@ -573,6 +576,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
        /* new render clears all callbacks */
        Scene *scene= CTX_data_scene(C);
        SceneRenderLayer *srl=NULL;
+       View3D *v3d= CTX_wm_view3d(C);
        Render *re;
        wmJob *steve;
        RenderJob *rj;
@@ -624,6 +628,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
        rj->scene= scene;
        rj->win= CTX_wm_window(C);
        rj->srl = srl;
+       rj->lay = (v3d)? v3d->lay|scene->lay: scene->lay;
        rj->anim= RNA_boolean_get(op->ptr, "animation");
        rj->iuser.scene= scene;
        rj->iuser.ok= 1;
index 44ca80867e43fdbc81481ac3296d5c9847e5e55d..1eac01a1fa1c9ca3e594dd3bbe7c57e939dc71ee 100644 (file)
@@ -752,11 +752,10 @@ void BIF_view3d_previewrender(Scene *scene, ScrArea *sa)
                        
                        /* allow localview render for objects with lights in normal layers */
                        if(v3d->lay & 0xFF000000)
-                               scene->lay |= v3d->lay;
-                       else scene->lay= v3d->lay;
+                               lay |= v3d->lay;
+                       else lay= v3d->lay;
                        
-                       RE_Database_FromScene(re, scene, 0);            // 0= dont use camera view
-                       scene->lay= lay;
+                       RE_Database_FromScene(re, scene, lay, 0);               // 0= dont use camera view
                        
                        rstats= RE_GetStats(re);
                        if(rstats->convertdone) 
@@ -934,7 +933,7 @@ static void shader_preview_render(ShaderPreview *sp, ID *id, int split, int firs
 
        /* entire cycle for render engine */
        RE_SetCamera(re, sce->camera);
-       RE_Database_FromScene(re, sce, 1);
+       RE_Database_FromScene(re, sce, sce->lay, 1);
        RE_TileProcessor(re, 0, 1);     // actual render engine
        RE_Database_Free(re);
 
index f9c4e9690a17b7211e24048397c8d7778a8580a7..19f6dcfbaa8b8c50a86d06fae8e9969049325db3 100644 (file)
@@ -198,7 +198,7 @@ void RE_SetPixelSize(struct Render *re, float pixsize);
 void RE_SetView (struct Render *re, float mat[][4]);
 
 /* make or free the dbase */
-void RE_Database_FromScene(struct Render *re, struct Scene *scene, int use_camera_view);
+void RE_Database_FromScene(struct Render *re, struct Scene *scene, unsigned int lay, int use_camera_view);
 void RE_Database_Free (struct Render *re);
 
 /* project dbase again, when viewplane/perspective changed */
@@ -214,8 +214,8 @@ void RE_init_threadcount(Render *re);
 void RE_TileProcessor(struct Render *re, int firsttile, int threaded);
 
 /* only RE_NewRender() needed, main Blender render calls */
-void RE_BlenderFrame(struct Render *re, struct Scene *scene, struct SceneRenderLayer *srl, int frame);
-void RE_BlenderAnim(struct Render *re, struct Scene *scene, int sfra, int efra, int tfra, struct ReportList *reports);
+void RE_BlenderFrame(struct Render *re, struct Scene *scene, struct SceneRenderLayer *srl, unsigned int lay, int frame);
+void RE_BlenderAnim(struct Render *re, struct Scene *scene, unsigned int lay, int sfra, int efra, int tfra, struct ReportList *reports);
 
 void RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);
 void RE_WriteRenderResult(RenderResult *rr, char *filename, int compress);
@@ -251,7 +251,7 @@ void RE_zbuf_accumulate_vecblur(struct NodeBlurData *nbd, int xsize, int ysize,
 #define RE_BAKE_DISPLACEMENT   5
 #define RE_BAKE_SHADOW                 6
 
-void RE_Database_Baking(struct Render *re, struct Scene *scene, int type, struct Object *actob);
+void RE_Database_Baking(struct Render *re, struct Scene *scene, unsigned int lay, int type, struct Object *actob);
 
 void RE_DataBase_GetView(struct Render *re, float mat[][4]);
 void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[][4]);
index e093c1a6c99d4ed81176c0b5fa08aa5ea32167f8..0b0ea075d79652c93ea5aa77158e21df196ef68f 100644 (file)
@@ -174,6 +174,7 @@ struct Render
        Scene *scene;
        RenderData r;
        World wrld;
+       unsigned int lay;
        
        ListBase parts;
        
index 9ed12a8fe6044a0ead5f41adc7b438d32d74cdf7..2a0086b436c0dd7072e8e0e77e37581ffa77734c 100644 (file)
@@ -137,7 +137,7 @@ void RE_set_customdata_names(struct ObjectRen *obr, struct CustomData *data);
 
 /* convertblender.c */
 void init_render_world(Render *re);
-void RE_Database_FromScene_Vectors(Render *re, struct Scene *sce);
+void RE_Database_FromScene_Vectors(Render *re, struct Scene *sce, unsigned int lay);
 
 
 #endif /* RENDERDATABASE_H */
index c75e825a0e7543972464b55532138469d4203e32..5a363b9cdfe4483985a5d95d9e6cf4260cc6f5ac 100644 (file)
@@ -3859,7 +3859,7 @@ static void add_lightgroup(Render *re, Group *group, int exclusive)
        for(go= group->gobject.first; go; go= go->next) {
                go->lampren= NULL;
                
-               if(go->ob->lay & re->scene->lay) {
+               if(go->ob->lay & re->lay) {
                        if(go->ob && go->ob->type==OB_LAMP) {
                                for(gol= re->lights.first; gol; gol= gol->next) {
                                        if(gol->ob==go->ob) {
@@ -4721,7 +4721,7 @@ static void dupli_render_particle_set(Render *re, Object *ob, int timeoffset, in
 static int get_vector_renderlayers(Scene *sce)
 {
        SceneRenderLayer *srl;
-       int lay= 0;
+       unsigned int lay= 0;
 
     for(srl= sce->r.layers.first; srl; srl= srl->next)
                if(srl->passflag & SCE_PASS_VECTOR)
@@ -4805,7 +4805,7 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp
                                }
                        }
                }
-               else if((base->lay & lay) || (ob->type==OB_LAMP && (base->lay & re->scene->lay)) ) {
+               else if((base->lay & lay) || (ob->type==OB_LAMP && (base->lay & re->lay)) ) {
                        if((ob->transflag & OB_DUPLI) && (ob->type!=OB_MBALL)) {
                                DupliObject *dob;
                                ListBase *lb;
@@ -4932,15 +4932,15 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp
 }
 
 /* used to be 'rotate scene' */
-void RE_Database_FromScene(Render *re, Scene *scene, int use_camera_view)
+void RE_Database_FromScene(Render *re, Scene *scene, unsigned int lay, int use_camera_view)
 {
        extern int slurph_opt;  /* key.c */
        Scene *sce;
        float mat[4][4];
        float amb[3];
-       unsigned int lay;
 
        re->scene= scene;
+       re->lay= lay;
        
        /* per second, per object, stats print this */
        re->i.infostr= "Preparing Scene data";
@@ -4958,8 +4958,8 @@ void RE_Database_FromScene(Render *re, Scene *scene, int use_camera_view)
        re->i.partsdone= 0;     /* signal now in use for previewrender */
        
        /* in localview, lamps are using normal layers, objects only local bits */
-       if(re->scene->lay & 0xFF000000) lay= re->scene->lay & 0xFF000000;
-       else lay= re->scene->lay;
+       if(re->lay & 0xFF000000)
+               lay &= 0xFF000000;
        
        /* applies changes fully */
        if((re->r.scemode & R_PREVIEWBUTS)==0)
@@ -5089,13 +5089,13 @@ void RE_DataBase_GetView(Render *re, float mat[][4])
 /* Speed Vectors                                                                                                                        */
 /* ------------------------------------------------------------------------- */
 
-static void database_fromscene_vectors(Render *re, Scene *scene, int timeoffset)
+static void database_fromscene_vectors(Render *re, Scene *scene, unsigned int lay, int timeoffset)
 {
        extern int slurph_opt;  /* key.c */
        float mat[4][4];
-       unsigned int lay;
        
        re->scene= scene;
+       re->lay= lay;
        
        /* XXX add test if dbase was filled already? */
        
@@ -5107,8 +5107,8 @@ static void database_fromscene_vectors(Render *re, Scene *scene, int timeoffset)
        slurph_opt= 0;
        
        /* in localview, lamps are using normal layers, objects only local bits */
-       if(re->scene->lay & 0xFF000000) lay= re->scene->lay & 0xFF000000;
-       else lay= re->scene->lay;
+       if(re->lay & 0xFF000000)
+               lay &= 0xFF000000;
        
        /* applies changes fully */
        scene->r.cfra += timeoffset;
@@ -5471,7 +5471,7 @@ static void free_dbase_object_vectors(ListBase *lb)
        BLI_freelistN(lb);
 }
 
-void RE_Database_FromScene_Vectors(Render *re, Scene *sce)
+void RE_Database_FromScene_Vectors(Render *re, Scene *sce, unsigned int lay)
 {
        ObjectInstanceRen *obi, *oldobi;
        StrandSurface *mesh;
@@ -5486,7 +5486,7 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce)
        speedvector_project(re, NULL, NULL, NULL);      /* initializes projection code */
        
        /* creates entire dbase */
-       database_fromscene_vectors(re, sce, -1);
+       database_fromscene_vectors(re, sce, lay, -1);
        
        /* copy away vertex info */
        copy_dbase_object_vectors(re, &oldtable);
@@ -5501,7 +5501,7 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce)
                /* creates entire dbase */
                re->i.infostr= "Calculating next frame vectors";
                
-               database_fromscene_vectors(re, sce, +1);
+               database_fromscene_vectors(re, sce, lay, +1);
        }       
        /* copy away vertex info */
        copy_dbase_object_vectors(re, &newtable);
@@ -5513,7 +5513,7 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce)
        re->strandsurface= strandsurface;
        
        if(!re->test_break(re->tbh))
-               RE_Database_FromScene(re, sce, 1);
+               RE_Database_FromScene(re, sce, lay, 1);
        
        if(!re->test_break(re->tbh)) {
                for(step= 0; step<2; step++) {
@@ -5602,14 +5602,14 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce)
    RE_BAKE_DISPLACEMENT:for baking, no lamps, only selected objects
    RE_BAKE_SHADOW: for baking, only shadows, but all objects
 */
-void RE_Database_Baking(Render *re, Scene *scene, int type, Object *actob)
+void RE_Database_Baking(Render *re, Scene *scene, unsigned int lay, int type, Object *actob)
 {
        float mat[4][4];
        float amb[3];
-       unsigned int lay;
        int onlyselected, nolamps;
        
        re->scene= scene;
+       re->lay= lay;
 
        /* renderdata setup and exceptions */
        re->r= scene->r;
@@ -5642,8 +5642,8 @@ void RE_Database_Baking(Render *re, Scene *scene, int type, Object *actob)
        re->lampren.first= re->lampren.last= NULL;
 
        /* in localview, lamps are using normal layers, objects only local bits */
-       if(re->scene->lay & 0xFF000000) lay= re->scene->lay & 0xFF000000;
-       else lay= re->scene->lay;
+       if(re->lay & 0xFF000000)
+               lay &= 0xFF000000;
        
        /* if no camera, set unit */
        if(re->scene->camera) {
index 7daf3e07105d129a263ba6c7cf15f99ef49f654f..73c9aaf6642149b2eeddadb830ae124ea1739cbc 100644 (file)
@@ -143,6 +143,7 @@ static Render *envmap_render_copy(Render *re, EnvMap *env)
        
        RE_InitState(envre, NULL, &envre->r, NULL, cuberes, cuberes, NULL);
        envre->scene= re->scene;        /* unsure about this... */
+       envre->lay= re->lay;
 
        /* view stuff in env render */
        envre->lens= 16.0f;
@@ -513,7 +514,7 @@ void make_envmaps(Render *re)
                                if(tex->env && tex->env->object) {
                                        EnvMap *env= tex->env;
                                        
-                                       if(env->object->lay & re->scene->lay) {
+                                       if(env->object->lay & re->lay) {
                                                if(env->stype==ENV_LOAD) {
                                                        float orthmat[4][4], mat[4][4], tmat[4][4];
                                                        
index 7c52857a94bba6270e4e8a9cebba54897b8d6451..39faf22fb31c7ce74aa528ea30054d09459b9116 100644 (file)
@@ -213,7 +213,7 @@ static void occ_build_shade(Render *re, OcclusionTree *tree)
 
        /* setup shade sample with correct passes */
        memset(&ssamp, 0, sizeof(ShadeSample));
-       ssamp.shi[0].lay= re->scene->lay;
+       ssamp.shi[0].lay= re->lay;
        ssamp.shi[0].passflag= SCE_PASS_DIFFUSE|SCE_PASS_RGBA;
        ssamp.shi[0].combinedflag= ~(SCE_PASS_SPEC);
        ssamp.tot= 1;
index e800ce3acf008a041496cb835b443fd8d842f15b..ec250a7136b39cf5e0cf8dc876a0c614d32ef71d 100644 (file)
@@ -1849,9 +1849,9 @@ static void do_render_3d(Render *re)
        
        /* make render verts/faces/halos/lamps */
        if(render_scene_needs_vector(re))
-               RE_Database_FromScene_Vectors(re, re->scene);
+               RE_Database_FromScene_Vectors(re, re->scene, re->lay);
        else
-          RE_Database_FromScene(re, re->scene, 1);
+          RE_Database_FromScene(re, re->scene, re->lay, 1);
        
        threaded_tile_processor(re);
        
@@ -2468,7 +2468,7 @@ static void do_render_composite_fields_blur_3d(Render *re)
                                        R.stats_draw= re->stats_draw;
                                        
                                        if (update_newframe)
-                                               scene_update_for_newframe(re->scene, re->scene->lay);
+                                               scene_update_for_newframe(re->scene, re->lay);
                                        
                                        if(re->r.scemode & R_FULL_SAMPLE) 
                                                do_merge_fullsample(re, ntree);
@@ -2729,7 +2729,7 @@ static void update_physics_cache(Render *re, Scene *scene, int anim_init)
        BKE_ptcache_make_cache(&baker);
 }
 /* evaluating scene options for general Blender render */
-static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLayer *srl, int anim, int anim_init)
+static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int anim, int anim_init)
 {
        int winx, winy;
        rcti disprect;
@@ -2756,6 +2756,7 @@ static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLay
        }
        
        re->scene= scene;
+       re->lay= lay;
        
        /* not too nice, but it survives anim-border render */
        if(anim) {
@@ -2796,7 +2797,7 @@ static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLay
 }
 
 /* general Blender frame render call */
-void RE_BlenderFrame(Render *re, Scene *scene, SceneRenderLayer *srl, int frame)
+void RE_BlenderFrame(Render *re, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int frame)
 {
        /* ugly global still... is to prevent preview events and signal subsurfs etc to make full resol */
        RenderGlobal.renderingslot= re->slot;
@@ -2805,7 +2806,7 @@ void RE_BlenderFrame(Render *re, Scene *scene, SceneRenderLayer *srl, int frame)
        
        scene->r.cfra= frame;
        
-       if(render_initialize_from_scene(re, scene, srl, 0, 0)) {
+       if(render_initialize_from_scene(re, scene, srl, lay, 0, 0)) {
                do_render_all_options(re);
        }
        
@@ -2902,15 +2903,14 @@ static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, R
 }
 
 /* saves images to disk */
-void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra, ReportList *reports)
+void RE_BlenderAnim(Render *re, Scene *scene, unsigned int lay, int sfra, int efra, int tfra, ReportList *reports)
 {
        bMovieHandle *mh= BKE_get_movie_handle(scene->r.imtype);
-       unsigned int lay;
        int cfrao= scene->r.cfra;
        int nfra;
        
        /* do not fully call for each frame, it initializes & pops output window */
-       if(!render_initialize_from_scene(re, scene, NULL, 0, 1))
+       if(!render_initialize_from_scene(re, scene, NULL, lay, 0, 1))
                return;
        
        /* ugly global still... is to prevent renderwin events and signal subsurfs etc to make full resol */
@@ -2945,7 +2945,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra, Repo
                        char name[FILE_MAX];
                        
                        /* only border now, todo: camera lens. (ton) */
-                       render_initialize_from_scene(re, scene, NULL, 1, 0);
+                       render_initialize_from_scene(re, scene, NULL, lay, 1, 0);
 
                        if(nfra!=scene->r.cfra) {
                                /*
@@ -2953,12 +2953,14 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra, Repo
                                 * From convertblender.c:
                                 * in localview, lamps are using normal layers, objects only local bits.
                                 */
-                               if(scene->lay & 0xFF000000)
-                                       lay= scene->lay & 0xFF000000;
+                               unsigned int updatelay;
+
+                               if(re->lay & 0xFF000000)
+                                       updatelay= re->lay & 0xFF000000;
                                else
-                                       lay= scene->lay;
+                                       updatelay= re->lay;
 
-                               scene_update_for_newframe(scene, lay);
+                               scene_update_for_newframe(scene, updatelay);
                                continue;
                        }
                        else
index 85c96d17ac0ca6358b7617edbf35204ed2d34439..d0a334f039e83364809948489321eea4990ca920 100644 (file)
@@ -2652,7 +2652,7 @@ int RE_bake_shade_all_selected(Render *re, int type, Object *actob, short *do_up
        /* get the threads running */
        for(a=0; a<re->r.threads; a++) {
                /* set defaults in handles */
-               handles[a].ssamp.shi[0].lay= re->scene->lay;
+               handles[a].ssamp.shi[0].lay= re->lay;
                
                if (type==RE_BAKE_SHADOW) {
                        handles[a].ssamp.shi[0].passflag= SCE_PASS_SHADOW;
index 75ad292c003bbd495a2bf608b505107ef6be52fa..0af05c3cdee22eb775d7ef36ac31a06adb1267e4 100644 (file)
@@ -494,7 +494,7 @@ static void precache_setup_shadeinput(Render *re, ObjectInstanceRen *obi, Materi
        shi->har= shi->mat->har;
        shi->obi= obi;
        shi->obr= obi->obr;
-       shi->lay = re->scene->lay;
+       shi->lay = re->lay;
 }
 
 static void precache_init_parts(Render *re, RayObject *tree, ShadeInput *shi, ObjectInstanceRen *obi, int totthread, int *parts)
index bf45a89fa5bf85a5827d5dd2336d743f57438e3d..3eb2cad1f65c4399d0d0ac98dec2bd485c2fe7ea 100644 (file)
@@ -685,7 +685,7 @@ static int render_frame(int argc, char **argv, void *data)
 
                        frame = MIN2(MAXFRAME, MAX2(MINAFRAME, frame));
 
-                       RE_BlenderAnim(re, scene, frame, frame, scene->r.frame_step, &reports);
+                       RE_BlenderAnim(re, scene, scene->lay, frame, frame, scene->r.frame_step, &reports);
                        return 1;
                } else {
                        printf("\nError: frame number must follow '-f'.\n");
@@ -705,7 +705,7 @@ static int render_animation(int argc, char **argv, void *data)
                Render *re= RE_NewRender(scene->id.name, RE_SLOT_DEFAULT);
                ReportList reports;
                BKE_reports_init(&reports, RPT_PRINT);
-               RE_BlenderAnim(re, scene, scene->r.sfra, scene->r.efra, scene->r.frame_step, &reports);
+               RE_BlenderAnim(re, scene, scene->lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, &reports);
        } else {
                printf("\nError: no blend loaded. cannot use '-a'.\n");
        }