[Bf-blender-cvs] [40c4b95] temp_localview_split: Make Blender Internal work with new local view design

Julian Eisel noreply at git.blender.org
Thu Jul 28 18:24:08 CEST 2016


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. @@




More information about the Bf-blender-cvs mailing list