Commit: 40c4b952874a1b1b624d464df4737f0126739931
Author: Julian Eisel
Date:   Thu Jul 28 18:20:56 2016 +0200
Branches: temp_localview_split
https://developer.blender.org/rB40c4b952874a1b1b624d464df4737f0126739931

Make Blender Internal work with new local view design

Only got a rough overview over how BI works with layers and local view, but I 
think what I did here is enough/correct.

===================================================================

M       source/blender/blenkernel/intern/sequencer.c
M       source/blender/editors/object/object_bake.c
M       source/blender/editors/render/render_internal.c
M       source/blender/render/extern/include/RE_pipeline.h
M       source/blender/render/intern/include/render_types.h
M       source/blender/render/intern/include/renderdatabase.h
M       source/blender/render/intern/source/convertblender.c
M       source/blender/render/intern/source/pipeline.c
M       source/blenderplayer/bad_level_call_stubs/stubs.c
M       source/creator/creator_args.c

===================================================================

diff --git a/source/blender/blenkernel/intern/sequencer.c 
b/source/blender/blenkernel/intern/sequencer.c
index 6067a8b..ce8ddaf 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -3304,7 +3304,7 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData 
*context, Sequence *seq
                                re = RE_NewRender(scene->id.name);
 
                        BKE_scene_update_for_newframe(context->eval_ctx, 
context->bmain, scene, scene->lay);
-                       RE_BlenderFrame(re, context->bmain, scene, NULL, 
camera, scene->lay, frame, false);
+                       RE_BlenderFrame(re, context->bmain, scene, NULL, NULL, 
camera, scene->lay, frame, false);
 
                        /* restore previous state after it was toggled on & off 
by RE_BlenderFrame */
                        G.is_rendering = is_rendering;
diff --git a/source/blender/editors/object/object_bake.c 
b/source/blender/editors/object/object_bake.c
index 11d96da..1294ffd 100644
--- a/source/blender/editors/object/object_bake.c
+++ b/source/blender/editors/object/object_bake.c
@@ -702,7 +702,7 @@ static void bake_startjob(void *bkv, short *stop, short 
*do_update, float *progr
        RE_test_break_cb(bkr->re, NULL, thread_break);
        G.is_break = false;   /* BKE_blender_test_break uses this global */
 
-       RE_Database_Baking(bkr->re, bmain, scene, scene->lay, 
scene->r.bake_mode, bkr->actob);
+       RE_Database_Baking(bkr->re, bmain, scene, scene->r.bake_mode, 
bkr->actob);
 
        /* baking itself is threaded, cannot use test_break in threads. we also 
update optional imagewindow */
        bkr->result = RE_bake_shade_all_selected(bkr->re, scene->r.bake_mode, 
bkr->actob, bkr->do_update, bkr->progress);
@@ -829,7 +829,7 @@ static int bake_image_exec(bContext *C, wmOperator *op)
                        RE_test_break_cb(bkr.re, NULL, thread_break);
                        G.is_break = false;   /* BKE_blender_test_break uses 
this global */
 
-                       RE_Database_Baking(bkr.re, bmain, scene, scene->lay, 
scene->r.bake_mode, (scene->r.bake_flag & R_BAKE_TO_ACTIVE) ? OBACT : NULL);
+                       RE_Database_Baking(bkr.re, bmain, scene, 
scene->r.bake_mode, (scene->r.bake_flag & R_BAKE_TO_ACTIVE) ? OBACT : NULL);
 
                        /* baking itself is threaded, cannot use test_break in 
threads  */
                        BLI_init_threads(&threads, do_bake_render, 1);
diff --git a/source/blender/editors/render/render_internal.c 
b/source/blender/editors/render/render_internal.c
index ff33ae1..ef980ce 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -100,6 +100,7 @@ typedef struct RenderJob {
        Scene *current_scene;
        Render *re;
        SceneRenderLayer *srl;
+       LocalViewInfo *localview;
        struct Object *camera_override;
        int lay_override;
        bool v3d_override;
@@ -291,6 +292,7 @@ static int screen_render_exec(bContext *C, wmOperator *op)
        Image *ima;
        View3D *v3d = CTX_wm_view3d(C);
        Main *mainp = CTX_data_main(C);
+       LocalViewInfo *localview = (v3d && v3d->localviewd) ? 
&v3d->localviewd->info : NULL;
        unsigned int lay_override;
        const bool is_animation = RNA_boolean_get(op->ptr, "animation");
        const bool is_write_still = RNA_boolean_get(op->ptr, "write_still");
@@ -324,9 +326,9 @@ static int screen_render_exec(bContext *C, wmOperator *op)
 
        BLI_begin_threaded_malloc();
        if (is_animation)
-               RE_BlenderAnim(re, mainp, scene, camera_override, lay_override, 
scene->r.sfra, scene->r.efra, scene->r.frame_step);
+               RE_BlenderAnim(re, mainp, scene, localview, camera_override, 
lay_override, scene->r.sfra, scene->r.efra, scene->r.frame_step);
        else
-               RE_BlenderFrame(re, mainp, scene, srl, camera_override, 
lay_override, scene->r.cfra, is_write_still);
+               RE_BlenderFrame(re, mainp, scene, srl, localview, 
camera_override, lay_override, scene->r.cfra, is_write_still);
        BLI_end_threaded_malloc();
 
        RE_SetReports(re, NULL);
@@ -599,9 +601,9 @@ static void render_startjob(void *rjv, short *stop, short 
*do_update, float *pro
        RE_SetReports(rj->re, rj->reports);
 
        if (rj->anim)
-               RE_BlenderAnim(rj->re, rj->main, rj->scene, 
rj->camera_override, rj->lay_override, rj->scene->r.sfra, rj->scene->r.efra, 
rj->scene->r.frame_step);
+               RE_BlenderAnim(rj->re, rj->main, rj->scene, rj->localview, 
rj->camera_override, rj->lay_override, rj->scene->r.sfra, rj->scene->r.efra, 
rj->scene->r.frame_step);
        else
-               RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, 
rj->camera_override, rj->lay_override, rj->scene->r.cfra, rj->write_still);
+               RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, 
rj->localview, rj->camera_override, rj->lay_override, rj->scene->r.cfra, 
rj->write_still);
 
        RE_SetReports(rj->re, NULL);
 }
@@ -894,6 +896,7 @@ static int screen_render_invoke(bContext *C, wmOperator 
*op, const wmEvent *even
        rj->scene = scene;
        rj->current_scene = rj->scene;
        rj->srl = srl;
+       rj->localview = NULL;
        rj->camera_override = camera_override;
        rj->lay_override = 0;
        rj->anim = is_animation;
@@ -921,8 +924,8 @@ static int screen_render_invoke(bContext *C, wmOperator 
*op, const wmEvent *even
                else if (camera_override && camera_override != scene->camera)
                        rj->v3d_override = true;
 
-//             if (v3d->localviewd)
-//                     rj->lay_override |= v3d->localvd->lay; /* TODO */
+               if (v3d->localviewd)
+                       rj->localview = &v3d->localviewd->info;
        }
 
        /* Lock the user interface depending on render settings. */
@@ -1263,19 +1266,12 @@ static void render_view3d_startjob(void *customdata, 
short *stop, short *do_upda
        RE_SetPixelSize(re, pixsize);
        
        if ((update_flag & PR_UPDATE_DATABASE) || rstats->convertdone == 0) {
-               unsigned int lay = rp->scene->lay;
-
-               /* allow localview render for objects with lights in normal 
layers */
-               if (rp->v3d->lay & 0xFF000000)
-                       lay |= rp->v3d->lay;
-               else lay = rp->v3d->lay;
-               
                RE_SetView(re, rp->viewmat);
 
                /* copying blender data while main thread is locked, to avoid 
crashes */
                WM_job_main_thread_lock_acquire(rp->job);
                RE_Database_Free(re);
-               RE_Database_FromScene(re, rp->bmain, rp->scene, lay, 0);        
        // 0= dont use camera view
+               RE_Database_FromScene(re, rp->bmain, rp->scene, rp->v3d->lay, 
0);               // 0= dont use camera view
                WM_job_main_thread_lock_release(rp->job);
 
                /* do preprocessing like building raytree, shadows, volumes, 
SSS */
diff --git a/source/blender/render/extern/include/RE_pipeline.h 
b/source/blender/render/extern/include/RE_pipeline.h
index 39f62f9..edee930 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -39,6 +39,7 @@ struct bMovieHandle;
 struct bNodeTree;
 struct Image;
 struct ImageFormatData;
+struct LocalViewInfo;
 struct Main;
 struct NodeBlurData;
 struct Object;
@@ -288,10 +289,13 @@ bool RE_WriteRenderViewsMovie(
 
 /* only RE_NewRender() needed, main Blender render calls */
 void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene 
*scene,
-                     struct SceneRenderLayer *srl, struct Object 
*camera_override,
-                     unsigned int lay_override, int frame, const bool 
write_still);
-void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene 
*scene, struct Object *camera_override,
-                    unsigned int lay_override, int sfra, int efra, int tfra);
+                     struct SceneRenderLayer *srl, struct LocalViewInfo 
*localview,
+                     struct Object *camera_override, unsigned int lay_override,
+                     int frame, const bool write_still);
+void RE_BlenderAnim(
+        struct Render *re, struct Main *bmain, struct Scene *scene, struct 
LocalViewInfo *localview,
+        struct Object *camera_override, unsigned int lay_override,
+        int sfra, int efra, int tfra);
 #ifdef WITH_FREESTYLE
 void RE_RenderFreestyleStrokes(struct Render *re, struct Main *bmain, struct 
Scene *scene, int render);
 void RE_RenderFreestyleExternal(struct Render *re);
@@ -363,7 +367,7 @@ struct RenderPass *RE_pass_find_by_type(volatile struct 
RenderLayer *rl, int pas
 
 void RE_Database_Baking(
         struct Render *re, struct Main *bmain, struct Scene *scene,
-        unsigned int lay, const int type, struct Object *actob);
+        const int type, struct Object *actob);
 
 void RE_DataBase_GetView(struct Render *re, float mat[4][4]);
 void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, 
float mat[4][4]);
diff --git a/source/blender/render/intern/include/render_types.h 
b/source/blender/render/intern/include/render_types.h
index b3a5ccd..8e90ff6 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -41,6 +41,7 @@
 #include "DNA_world_types.h"
 #include "DNA_object_types.h"
 #include "DNA_vec_types.h"
+#include "DNA_view3d_types.h" /* LocalViewInfo */
 
 #include "BLI_threads.h"
 
@@ -192,7 +193,9 @@ struct Render {
        World wrld;
        struct Object *camera_override;
        unsigned int lay, layer_override;
-       
+
+       LocalViewInfo *localview;
+
        ThreadRWMutex partsmutex;
        ListBase parts;
        
diff --git a/source/blender/render/intern/include/renderdatabase.h 
b/source/blender/render/intern/include/renderdatabase.h
index b576d69..cc123ba 100644
--- a/source/blender/render/intern/include/renderdatabase.h
+++ b/source/blender/render/intern/include/renderdatabase.h
@@ -164,7 +164,7 @@ void area_lamp_vectors(struct LampRen *lar);
 
 /* convertblender.c */
 void init_render_world(Render *re);
-void RE_Database_FromScene_Vectors(Render *re, struct Main *bmain, struct 
Scene *sce, unsigned int lay);
+void RE_Database_FromScene_Vectors(Render *re, struct Main *bmain, struct 
Scene *sce);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/render/intern/source/convertblender.c 
b/source/blender/render/intern/source/convertblender.c
index 86961cdd..20f993e 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -81,6 +81,7 @@
 #include "BKE_object.h"
 #include "BKE_particle.h"
 #include "BKE_scene.h"
+#include "BKE_utildefines.h"
 
 #include "PIL_time.h"
 
@@ -3988,7 +3989,8 @@ static void add_lightgroup(Render *re, Group *group, int 
exclusive)
 
                if (is_object_hidden(re, go->ob))
                        continue;
-               
+
+               /* Lamps ignore local view visibility, only check layers */
                if (go->ob->lay & re->lay) {
                        if (go->ob && go->ob->type==OB_LAMP) {
                                for (gol=

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to