[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36385] trunk/blender/source/blender: - pass the camera to the render stamp function.

Campbell Barton ideasman42 at gmail.com
Sat Apr 30 07:26:11 CEST 2011


Revision: 36385
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36385
Author:   campbellbarton
Date:     2011-04-30 05:26:09 +0000 (Sat, 30 Apr 2011)
Log Message:
-----------
- pass the camera to the render stamp function.
- add BKE_write_ibuf_stamp() since saving environment maps & screen shots shouldn't have stamp.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_image.h
    trunk/blender/source/blender/blenkernel/intern/depsgraph.c
    trunk/blender/source/blender/blenkernel/intern/image.c
    trunk/blender/source/blender/editors/render/render_opengl.c
    trunk/blender/source/blender/editors/render/render_shading.c
    trunk/blender/source/blender/editors/screen/screendump.c
    trunk/blender/source/blender/editors/space_image/image_ops.c
    trunk/blender/source/blender/makesrna/intern/rna_image_api.c
    trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/source/blender/blenkernel/BKE_image.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_image.h	2011-04-30 04:29:36 UTC (rev 36384)
+++ trunk/blender/source/blender/blenkernel/BKE_image.h	2011-04-30 05:26:09 UTC (rev 36385)
@@ -44,14 +44,16 @@
 struct Tex;
 struct anim;
 struct Scene;
+struct Object;
 
 /* call from library */
 void	free_image(struct Image *me);
 
-void	BKE_stamp_info(struct Scene *scene, struct ImBuf *ibuf);
-void	BKE_stamp_buf(struct Scene *scene, unsigned char *rect, float *rectf, int width, int height, int channels);
+void	BKE_stamp_info(struct Scene *scene, struct Object *camera, struct ImBuf *ibuf);
+void	BKE_stamp_buf(struct Scene *scene, struct Object *camera, unsigned char *rect, float *rectf, int width, int height, int channels);
 int		BKE_alphatest_ibuf(struct ImBuf *ibuf);
-int		BKE_write_ibuf(struct Scene *scene, struct ImBuf *ibuf, const char *name, int imtype, int subimtype, int quality);
+int		BKE_write_ibuf_stamp(struct Scene *scene, struct Object *camera, struct ImBuf *ibuf, const char *name, int imtype, int subimtype, int quality);
+int		BKE_write_ibuf(struct ImBuf *ibuf, const char *name, int imtype, int subimtype, int quality);
 void	BKE_makepicstring(char *string, const char *base, int frame, int imtype, const short use_ext, const short use_frames);
 int		BKE_add_image_extension(char *string, int imtype);
 int		BKE_ftype_to_imtype(int ftype);

Modified: trunk/blender/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2011-04-30 04:29:36 UTC (rev 36384)
+++ trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2011-04-30 05:26:09 UTC (rev 36385)
@@ -1905,7 +1905,9 @@
 	}
 
 	/* ensure cameras are set as if they are on a visible layer, because
-	   they ared still used for rendering or setting the camera view */
+	 * they ared still used for rendering or setting the camera view
+	 *
+	 * XXX, this wont work for local view / unlocked camera's */
 	if(sce->camera) {
 		node= dag_get_node(sce->theDag, sce->camera);
 		node->scelay |= lay;

Modified: trunk/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/image.c	2011-04-30 04:29:36 UTC (rev 36384)
+++ trunk/blender/source/blender/blenkernel/intern/image.c	2011-04-30 05:26:09 UTC (rev 36385)
@@ -880,7 +880,7 @@
 	char 	rendertime[64];
 } StampData;
 
-static void stampdata(Scene *scene, StampData *stamp_data, int do_prefix)
+static void stampdata(Scene *scene, Object *camera, StampData *stamp_data, int do_prefix)
 {
 	char text[256];
 	struct tm *tl;
@@ -959,14 +959,14 @@
 	}
 
 	if (scene->r.stamp & R_STAMP_CAMERA) {
-		BLI_snprintf(stamp_data->camera, sizeof(stamp_data->camera), do_prefix ? "Camera %s":"%s", scene->camera ? scene->camera->id.name+2 : "<none>");
+		BLI_snprintf(stamp_data->camera, sizeof(stamp_data->camera), do_prefix ? "Camera %s":"%s", camera ? camera->id.name+2 : "<none>");
 	} else {
 		stamp_data->camera[0] = '\0';
 	}
 
 	if (scene->r.stamp & R_STAMP_CAMERALENS) {
-		if (scene->camera && scene->camera->type == OB_CAMERA) {
-			BLI_snprintf(text, sizeof(text), "%.2f", ((Camera *)scene->camera->data)->lens);
+		if (camera && camera->type == OB_CAMERA) {
+			BLI_snprintf(text, sizeof(text), "%.2f", ((Camera *)camera->data)->lens);
 		}
 		else 		strcpy(text, "<none>");
 
@@ -1006,7 +1006,7 @@
 	}
 }
 
-void BKE_stamp_buf(Scene *scene, unsigned char *rect, float *rectf, int width, int height, int channels)
+void BKE_stamp_buf(Scene *scene, Object *camera, unsigned char *rect, float *rectf, int width, int height, int channels)
 {
 	struct StampData stamp_data;
 	float w, h, pad;
@@ -1017,7 +1017,7 @@
 	if (!rect && !rectf)
 		return;
 	
-	stampdata(scene, &stamp_data, 1);
+	stampdata(scene, camera, &stamp_data, 1);
 
 	/* TODO, do_versions */
 	if(scene->r.stamp_font_id < 8)
@@ -1199,14 +1199,14 @@
 	BLF_buffer(mono, NULL, NULL, 0, 0, 0);
 }
 
-void BKE_stamp_info(Scene *scene, struct ImBuf *ibuf)
+void BKE_stamp_info(Scene *scene, Object *camera, struct ImBuf *ibuf)
 {
 	struct StampData stamp_data;
 
 	if (!ibuf)	return;
 	
 	/* fill all the data values, no prefix */
-	stampdata(scene, &stamp_data, 0);
+	stampdata(scene, camera, &stamp_data, 0);
 	
 	if (stamp_data.file[0])		IMB_metadata_change_field (ibuf, "File",		stamp_data.file);
 	if (stamp_data.note[0])		IMB_metadata_change_field (ibuf, "Note",		stamp_data.note);
@@ -1244,7 +1244,7 @@
 	return FALSE;
 }
 
-int BKE_write_ibuf(Scene *scene, ImBuf *ibuf, const char *name, int imtype, int subimtype, int quality)
+int BKE_write_ibuf(ImBuf *ibuf, const char *name, int imtype, int subimtype, int quality)
 {
 	int ok;
 	(void)subimtype; /* quies unused warnings */
@@ -1339,9 +1339,6 @@
 	}
 	
 	BLI_make_existing_file(name);
-
-	if(scene && scene->r.stamp & R_STAMP_ALL)
-		BKE_stamp_info(scene, ibuf);
 	
 	ok = IMB_saveiff(ibuf, name, IB_rect | IB_zbuf | IB_zbuffloat);
 	if (ok == 0) {
@@ -1351,7 +1348,15 @@
 	return(ok);
 }
 
+int BKE_write_ibuf_stamp(Scene *scene, struct Object *camera, ImBuf *ibuf, const char *name, int imtype, int subimtype, int quality)
+{
+	if(scene && scene->r.stamp & R_STAMP_ALL)
+		BKE_stamp_info(scene, camera, ibuf);
 
+	return BKE_write_ibuf(ibuf, name, imtype, subimtype, quality);
+}
+
+
 void BKE_makepicstring(char *string, const char *base, int frame, int imtype, const short use_ext, const short use_frames)
 {
 	if (string==NULL) return;

Modified: trunk/blender/source/blender/editors/render/render_opengl.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_opengl.c	2011-04-30 04:29:36 UTC (rev 36384)
+++ trunk/blender/source/blender/editors/render/render_opengl.c	2011-04-30 05:26:09 UTC (rev 36385)
@@ -114,6 +114,7 @@
 	View3D *v3d= oglrender->v3d;
 	RegionView3D *rv3d= oglrender->rv3d;
 	RenderResult *rr;
+	Object *camera= NULL;
 	ImBuf *ibuf;
 	void *lock;
 	float winmat[4][4];
@@ -140,7 +141,8 @@
 		/* render 3d view */
 		if(rv3d->persp==RV3D_CAMOB && v3d->camera) {
 			/*int is_ortho= scene->r.mode & R_ORTHO;*/
-			RE_GetCameraWindow(oglrender->re, v3d->camera, scene->r.cfra, winmat);
+			camera= v3d->camera;
+			RE_GetCameraWindow(oglrender->re, camera, scene->r.cfra, winmat);
 			
 		}
 		else {
@@ -191,6 +193,7 @@
 		/* shouldnt suddenly give errors mid-render but possible */
 		char err_out[256]= "unknown";
 		ImBuf *ibuf_view= ED_view3d_draw_offscreen_imbuf_simple(scene, oglrender->sizex, oglrender->sizey, IB_rectfloat, OB_SOLID, err_out);
+		camera= scene->camera;
 
 		if(ibuf_view) {
 			memcpy(rr->rectf, ibuf_view->rect_float, sizeof(float) * 4 * oglrender->sizex * oglrender->sizey);
@@ -204,7 +207,7 @@
 	/* rr->rectf is now filled with image data */
 
 	if((scene->r.stamp & R_STAMP_ALL) && (scene->r.stamp & R_STAMP_DRAW))
-		BKE_stamp_buf(scene, NULL, rr->rectf, rr->rectx, rr->recty, 4);
+		BKE_stamp_buf(scene, camera, NULL, rr->rectf, rr->rectx, rr->recty, 4);
 
 	RE_ReleaseResult(oglrender->re);
 
@@ -218,7 +221,7 @@
 			char name[FILE_MAX];
 			int ok;
 			BKE_makepicstring(name, scene->r.pic, scene->r.cfra, scene->r.imtype, scene->r.scemode & R_EXTENSION, FALSE);
-			ok= BKE_write_ibuf(scene, ibuf, name, scene->r.imtype, scene->r.subimtype, scene->r.quality);
+			ok= BKE_write_ibuf(ibuf, name, scene->r.imtype, scene->r.subimtype, scene->r.quality); /* no need to stamp here */
 			if(ok)	printf("OpenGL Render written to '%s'\n", name);
 			else	printf("OpenGL Render failed to write '%s'\n", name);
 		}
@@ -387,6 +390,7 @@
 	char name[FILE_MAXDIR+FILE_MAXFILE];
 	int ok= 0;
 	const short  view_context= (oglrender->v3d != NULL);
+	Object *camera= NULL;
 
 	/* update animated image textures for gpu, etc,
 	 * call before scene_update_for_newframe so modifiers with textuers dont lag 1 frame */
@@ -409,12 +413,17 @@
 		if(oglrender->rv3d->persp==RV3D_CAMOB && oglrender->v3d->camera && oglrender->v3d->scenelock) {
 			/* since scene_update_for_newframe() is used rather
 			 * then ED_update_for_newframe() the camera needs to be set */
-			if(scene_camera_switch_update(scene))
+			if(scene_camera_switch_update(scene)) {
 				oglrender->v3d->camera= scene->camera;
+			}
+
+			camera= oglrender->v3d->camera;
 		}
 	}
 	else {
 		scene_camera_switch_update(scene);
+
+		camera= scene->camera;
 	}
 
 	/* render into offscreen buffer */
@@ -433,7 +442,7 @@
 		}
 		else {
 			BKE_makepicstring(name, scene->r.pic, scene->r.cfra, scene->r.imtype, scene->r.scemode & R_EXTENSION, TRUE);
-			ok= BKE_write_ibuf(scene, ibuf, name, scene->r.imtype, scene->r.subimtype, scene->r.quality);
+			ok= BKE_write_ibuf_stamp(scene, camera, ibuf, name, scene->r.imtype, scene->r.subimtype, scene->r.quality);
 
 			if(ok==0) {
 				printf("Write error: cannot save %s\n", name);

Modified: trunk/blender/source/blender/editors/render/render_shading.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_shading.c	2011-04-30 04:29:36 UTC (rev 36384)
+++ trunk/blender/source/blender/editors/render/render_shading.c	2011-04-30 05:26:09 UTC (rev 36385)
@@ -874,7 +874,7 @@
 	/* to save, we first get absolute path */
 	BLI_path_abs(str, G.main->name);
 	
-	if (BKE_write_ibuf(scene, ibuf, str, imtype, scene->r.subimtype, scene->r.quality)) {
+	if (BKE_write_ibuf(ibuf, str, imtype, scene->r.subimtype, scene->r.quality)) {
 		retval = OPERATOR_FINISHED;
 	}
 	else {

Modified: trunk/blender/source/blender/editors/screen/screendump.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screendump.c	2011-04-30 04:29:36 UTC (rev 36384)
+++ trunk/blender/source/blender/editors/screen/screendump.c	2011-04-30 05:26:09 UTC (rev 36385)
@@ -95,7 +95,7 @@
 			ibuf= IMB_allocImBuf(scd->dumpsx, scd->dumpsy, 24, 0);
 			ibuf->rect= scd->dumprect;
 			
-			BKE_write_ibuf(scene, ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality);
+			BKE_write_ibuf(ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality);
 
 			IMB_freeImBuf(ibuf);
 
@@ -280,7 +280,7 @@
 				BKE_makepicstring(name, rd.pic, cfra, rd.imtype, rd.scemode & R_EXTENSION, TRUE);
 				
 				ibuf->rect= sj->dumprect;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list