[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36384] trunk/blender/source: add back support for rendering local view camera.

Campbell Barton ideasman42 at gmail.com
Sat Apr 30 06:29:42 CEST 2011


Revision: 36384
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36384
Author:   campbellbarton
Date:     2011-04-30 04:29:36 +0000 (Sat, 30 Apr 2011)
Log Message:
-----------
add back support for rendering local view camera.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/editors/render/render_internal.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/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/initrender.c
    trunk/blender/source/blender/render/intern/source/pipeline.c
    trunk/blender/source/creator/creator.c

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2011-04-30 04:14:19 UTC (rev 36383)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2011-04-30 04:29:36 UTC (rev 36384)
@@ -1948,7 +1948,7 @@
 			if(re==NULL)
 				re= RE_NewRender(sce->id.name);
 			
-			RE_BlenderFrame(re, context.bmain, sce, NULL, sce->lay, frame, FALSE);
+			RE_BlenderFrame(re, context.bmain, sce, NULL, NULL, sce->lay, frame, FALSE);
 
 			/* restore previous state after it was toggled on & off by RE_BlenderFrame */
 			G.rendering = rendering;

Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c	2011-04-30 04:14:19 UTC (rev 36383)
+++ trunk/blender/source/blender/editors/render/render_internal.c	2011-04-30 04:29:36 UTC (rev 36384)
@@ -421,6 +421,7 @@
 	unsigned int lay= (v3d)? v3d->lay: scene->lay;
 	const short is_animation= RNA_boolean_get(op->ptr, "animation");
 	const short is_write_still= RNA_boolean_get(op->ptr, "write_still");
+	struct Object *camera_override= v3d ? V3D_CAMERA_LOCAL(v3d) : NULL;
 
 	if(!is_animation && is_write_still && BKE_imtype_is_movie(scene->r.imtype)) {
 		BKE_report(op->reports, RPT_ERROR, "Can't write a single file with an animation format selected.");
@@ -446,9 +447,9 @@
 	seq_stripelem_cache_cleanup();
 
 	if(is_animation)
-		RE_BlenderAnim(re, mainp, scene, lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
+		RE_BlenderAnim(re, mainp, scene, camera_override, lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
 	else
-		RE_BlenderFrame(re, mainp, scene, NULL, lay, scene->r.cfra, is_write_still);
+		RE_BlenderFrame(re, mainp, scene, NULL, camera_override, lay, scene->r.cfra, is_write_still);
 
 	// no redraw needed, we leave state as we entered it
 	ED_update_for_newframe(mainp, scene, CTX_wm_screen(C), 1);
@@ -464,6 +465,7 @@
 	Render *re;
 	wmWindow *win;
 	SceneRenderLayer *srl;
+	struct Object *camera_override;
 	int lay;
 	short anim, write_still;
 	Image *image;
@@ -590,9 +592,9 @@
 	rj->progress= progress;
 
 	if(rj->anim)
-		RE_BlenderAnim(rj->re, rj->main, rj->scene, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
+		RE_BlenderAnim(rj->re, rj->main, rj->scene, rj->camera_override, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
 	else
-		RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, rj->lay, rj->scene->r.cfra, rj->write_still);
+		RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, rj->camera_override, rj->lay, rj->scene->r.cfra, rj->write_still);
 }
 
 static void render_endjob(void *rjv)
@@ -679,12 +681,13 @@
 	int jobflag;
 	const short is_animation= RNA_boolean_get(op->ptr, "animation");
 	const short is_write_still= RNA_boolean_get(op->ptr, "write_still");
+	struct Object *camera_override= v3d ? V3D_CAMERA_LOCAL(v3d) : NULL;
 	
 	/* only one render job at a time */
 	if(WM_jobs_test(CTX_wm_manager(C), scene))
 		return OPERATOR_CANCELLED;
 
-	if(!RE_is_rendering_allowed(scene, op->reports, render_error_reports)) {
+	if(!RE_is_rendering_allowed(scene, camera_override, op->reports, render_error_reports)) {
 		return OPERATOR_CANCELLED;
 	}
 
@@ -761,6 +764,7 @@
 	rj->scene= scene;
 	rj->win= CTX_wm_window(C);
 	rj->srl = srl;
+	rj->camera_override = camera_override;
 	rj->lay = (v3d)? v3d->lay: scene->lay;
 	rj->anim= is_animation;
 	rj->write_still= is_write_still && !is_animation;

Modified: trunk/blender/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2011-04-30 04:14:19 UTC (rev 36383)
+++ trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2011-04-30 04:29:36 UTC (rev 36384)
@@ -191,6 +191,7 @@
 void RE_SetDispRect (struct Render *re, rcti *disprect);
 
 /* set up the viewplane/perspective matrix, three choices */
+struct Object *RE_GetCamera(struct Render *re); /* return camera override if set */
 void RE_SetCamera(struct Render *re, struct Object *camera);
 void RE_SetWindow (struct Render *re, rctf *viewplane, float clipsta, float clipend);
 void RE_SetOrtho (struct Render *re, rctf *viewplane, float clipsta, float clipend);
@@ -216,8 +217,8 @@
 void RE_TileProcessor(struct Render *re);
 
 /* only RE_NewRender() needed, main Blender render calls */
-void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct SceneRenderLayer *srl, unsigned int lay, int frame, const short write_still);
-void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, unsigned int lay, int sfra, int efra, int tfra, struct ReportList *reports);
+void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct SceneRenderLayer *srl, struct Object *camera_override, unsigned int lay, int frame, const short write_still);
+void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, struct Object *camera_override, unsigned int lay, int sfra, int efra, int tfra, struct ReportList *reports);
 
 /* main preview render call */
 void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene);
@@ -305,7 +306,7 @@
 void RE_engines_init(void);
 void RE_engines_exit(void);
 
-int RE_is_rendering_allowed(struct Scene *scene, void *erh, void (*error)(void *handle, const char *str));
+int RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override, void *erh, void (*error)(void *handle, const char *str));
 
 #endif /* RE_PIPELINE_H */
 

Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h	2011-04-30 04:14:19 UTC (rev 36383)
+++ trunk/blender/source/blender/render/intern/include/render_types.h	2011-04-30 04:29:36 UTC (rev 36384)
@@ -182,6 +182,7 @@
 	Scene *scene;
 	RenderData r;
 	World wrld;
+	struct Object *camera_override;
 	unsigned int lay;
 	
 	ListBase parts;

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2011-04-30 04:14:19 UTC (rev 36383)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2011-04-30 04:29:36 UTC (rev 36384)
@@ -164,7 +164,8 @@
 	World *wrld= NULL;
 	HaloRen *har;
 	Scene *scene;
-	Camera *camera;
+	Object *camera= re ? RE_GetCamera(re) : scene->camera;
+	Camera *cam;
 	double dblrand, hlfrand;
 	float vec[4], fx, fy, fz;
 	float fac, starmindist, clipend;
@@ -205,11 +206,11 @@
 		* y = -z | +z
 		*/
 
-	if(scene->camera==NULL || scene->camera->type != OB_CAMERA)
+	if(camera==NULL || camera->type != OB_CAMERA)
 		return;
 
-	camera = scene->camera->data;
-	clipend = camera->clipend;
+	cam = camera->data;
+	clipend = cam->clipend;
 	
 	/* convert to grid coordinates */
 	
@@ -1676,7 +1677,7 @@
 		bb.align = part->bb_align;
 		bb.anim = part->bb_anim;
 		bb.lock = part->draw & PART_DRAW_BB_LOCK;
-		bb.ob = (part->bb_ob ? part->bb_ob : re->scene->camera);
+		bb.ob = (part->bb_ob ? part->bb_ob : RE_GetCamera(re));
 		bb.offset[0] = part->bb_offset[0];
 		bb.offset[1] = part->bb_offset[1];
 		bb.split_offset = part->bb_split_offset;
@@ -4979,6 +4980,7 @@
 	Scene *sce;
 	float mat[4][4];
 	float amb[3];
+	Object *camera= RE_GetCamera(re);
 
 	re->main= bmain;
 	re->scene= scene;
@@ -5008,16 +5010,16 @@
 		scene_update_for_newframe(re->main, re->scene, lay);
 	
 	/* if no camera, viewmat should have been set! */
-	if(use_camera_view && re->scene->camera) {
+	if(use_camera_view && camera) {
 		/* called before but need to call again incase of lens animation from the
 		 * above call to scene_update_for_newframe, fixes bug. [#22702].
 		 * following calls dont depend on 'RE_SetCamera' */
-		RE_SetCamera(re, scene->camera);
+		RE_SetCamera(re, camera);
 
-		normalize_m4(re->scene->camera->obmat);
-		invert_m4_m4(mat, re->scene->camera->obmat);
+		normalize_m4(camera->obmat);
+		invert_m4_m4(mat, camera->obmat);
 		RE_SetView(re, mat);
-		re->scene->camera->recalc= OB_RECALC_OB; /* force correct matrix for scaled cameras */
+		camera->recalc= OB_RECALC_OB; /* force correct matrix for scaled cameras */
 	}
 	
 	init_render_world(re);	/* do first, because of ambient. also requires re->osa set correct */
@@ -5142,6 +5144,7 @@
 
 static void database_fromscene_vectors(Render *re, Scene *scene, unsigned int lay, int timeoffset)
 {
+	Object *camera= RE_GetCamera(re);
 	float mat[4][4];
 	
 	re->scene= scene;
@@ -5165,9 +5168,9 @@
 	scene_update_for_newframe(re->main, re->scene, lay);
 	
 	/* if no camera, viewmat should have been set! */
-	if(re->scene->camera) {
-		normalize_m4(re->scene->camera->obmat);
-		invert_m4_m4(mat, re->scene->camera->obmat);
+	if(camera) {
+		normalize_m4(camera->obmat);
+		invert_m4_m4(mat, camera->obmat);
 		RE_SetView(re, mat);
 	}
 	
@@ -5654,6 +5657,7 @@
 */
 void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay, int type, Object *actob)
 {
+	Object *camera= RE_GetCamera(re);
 	float mat[4][4];
 	float amb[3];
 	int onlyselected, nolamps;
@@ -5696,9 +5700,9 @@
 		lay &= 0xFF000000;
 	
 	/* if no camera, set unit */
-	if(re->scene->camera) {
-		normalize_m4(re->scene->camera->obmat);
-		invert_m4_m4(mat, re->scene->camera->obmat);
+	if(camera) {
+		normalize_m4(camera->obmat);
+		invert_m4_m4(mat, camera->obmat);
 		RE_SetView(re, mat);
 	}
 	else {
@@ -5762,13 +5766,17 @@
 	Render *re;
 	float ho[4], mat[4][4];
 	int a;
-	
+	Object *camera= NULL;
+
 	if(v3d==NULL) {
 		printf("Need a 3d view to make sticky\n");
 		return;
 	}
-	
-	if(scene->camera==NULL) {
+
+	if(v3d)				camera= V3D_CAMERA_LOCAL(v3d);
+	if(camera == NULL)	camera= scene->camera;
+
+	if(camera==NULL) {
 		printf("Need camera to make sticky\n");
 		return;
 	}
@@ -5781,11 +5789,11 @@
 	RE_InitState(re, NULL, &scene->r, NULL, scene->r.xsch, scene->r.ysch, NULL);
 	
 	/* use renderdata and camera to set viewplane */
-	RE_SetCamera(re, scene->camera);
+	RE_SetCamera(re, camera);
 
 	/* and set view matrix */
-	normalize_m4(scene->camera->obmat);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list