[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27498] trunk/blender/source: Rendering from 3d view in local view or with unlocked layer was not

Brecht Van Lommel brecht at blender.org
Sun Mar 14 21:24:11 CET 2010


Revision: 27498
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27498
Author:   blendix
Date:     2010-03-14 21:24:11 +0100 (Sun, 14 Mar 2010)

Log Message:
-----------
Rendering from 3d view in local view or with unlocked layer was not
working yet, now layer is passed along to render engine, changes quite
a few files because simple swapping trick no longer works with threading.

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

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-03-14 20:18:15 UTC (rev 27497)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-03-14 20:24:11 UTC (rev 27498)
@@ -2181,7 +2181,7 @@
 				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);
 

Modified: trunk/blender/source/blender/editors/object/object_bake.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_bake.c	2010-03-14 20:18:15 UTC (rev 27497)
+++ trunk/blender/source/blender/editors/object/object_bake.c	2010-03-14 20:24:11 UTC (rev 27498)
@@ -203,7 +203,7 @@
 	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 @@
 		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);

Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c	2010-03-14 20:18:15 UTC (rev 27497)
+++ trunk/blender/source/blender/editors/render/render_internal.c	2010-03-14 20:24:11 UTC (rev 27498)
@@ -405,6 +405,8 @@
 {
 	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 @@
 	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 @@
 	Render *re;
 	wmWindow *win;
 	SceneRenderLayer *srl;
+	int lay;
 	int anim;
 	Image *image;
 	ImageUser iuser;
@@ -531,9 +534,9 @@
 	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 @@
 	/* 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 @@
 	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;

Modified: trunk/blender/source/blender/editors/render/render_preview.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_preview.c	2010-03-14 20:18:15 UTC (rev 27497)
+++ trunk/blender/source/blender/editors/render/render_preview.c	2010-03-14 20:24:11 UTC (rev 27498)
@@ -752,11 +752,10 @@
 			
 			/* 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 @@
 
 	/* 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);
 

Modified: trunk/blender/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2010-03-14 20:18:15 UTC (rev 27497)
+++ trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2010-03-14 20:24:11 UTC (rev 27498)
@@ -198,7 +198,7 @@
 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_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 @@
 #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]);

Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h	2010-03-14 20:18:15 UTC (rev 27497)
+++ trunk/blender/source/blender/render/intern/include/render_types.h	2010-03-14 20:24:11 UTC (rev 27498)
@@ -174,6 +174,7 @@
 	Scene *scene;
 	RenderData r;
 	World wrld;
+	unsigned int lay;
 	
 	ListBase parts;
 	

Modified: trunk/blender/source/blender/render/intern/include/renderdatabase.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/renderdatabase.h	2010-03-14 20:18:15 UTC (rev 27497)
+++ trunk/blender/source/blender/render/intern/include/renderdatabase.h	2010-03-14 20:24:11 UTC (rev 27498)
@@ -137,7 +137,7 @@
 
 /* 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 */

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2010-03-14 20:18:15 UTC (rev 27497)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2010-03-14 20:24:11 UTC (rev 27498)
@@ -3859,7 +3859,7 @@
 	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 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 @@
 				}
 			}
 		}
-		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 @@
 }
 
 /* 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 @@
 	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 @@
 /* Speed Vectors															 */
 /* ------------------------------------------------------------------------- */
 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list