[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21493] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Fri Jul 10 18:55:49 CEST 2009


Revision: 21493
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21493
Author:   ton
Date:     2009-07-10 18:55:49 +0200 (Fri, 10 Jul 2009)

Log Message:
-----------
2.5

Render usability:

- Option back to render to imagewindow, or fullscreen.
  The latter is default. Setting is stored in Scene.
- Added button in output panel, the option "to new window" will follow!
- F11 again toggles render view
  (moved MS Windows "full screen" to shift+F11 for now)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/image.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
    branches/blender2.5/blender/source/blender/editors/space_image/image_draw.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_image_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_scene_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/image.c	2009-07-10 16:42:51 UTC (rev 21492)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/image.c	2009-07-10 16:55:49 UTC (rev 21493)
@@ -253,6 +253,10 @@
 	if (ima->preview) {
 		BKE_previewimg_free(&ima->preview);
 	}
+	if (ima->render_text) {
+		MEM_freeN(ima->render_text);
+		ima->render_text= NULL;
+	}
 }
 
 /* only image block itself */

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-07-10 16:42:51 UTC (rev 21492)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-07-10 16:55:49 UTC (rev 21493)
@@ -2641,6 +2641,7 @@
 	ima->anim= NULL;
 	ima->rr= NULL;
 	ima->repbind= NULL;
+	ima->render_text= newdataadr(fd, ima->render_text);
 	
 	ima->packedfile = direct_link_packedfile(fd, ima->packedfile);
 	ima->preview = direct_link_preview_image(fd, ima->preview);

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c	2009-07-10 16:42:51 UTC (rev 21492)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c	2009-07-10 16:55:49 UTC (rev 21493)
@@ -1439,7 +1439,10 @@
 
 			write_previews(wd, ima->preview);
 
-			}
+			/* exception: render text only saved in undo files (wd->current) */
+			if (ima->render_text && wd->current)
+				writedata(wd, DATA, IMA_RW_MAXTEXT, ima->render_text);
+		}
 		ima= ima->id.next;
 	}
 	/* flush helps the compression for undo-save */

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-07-10 16:42:51 UTC (rev 21492)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-07-10 16:55:49 UTC (rev 21493)
@@ -2286,46 +2286,54 @@
 
 static void screen_set_image_output(bContext *C)
 {
+	Scene *scene= CTX_data_scene(C);
 	ScrArea *sa;
 	SpaceImage *sima;
 	
-	sa= find_area_showing_r_result(C);
+	if(scene->r.displaymode==R_OUTPUT_SCREEN) {
+		/* this function returns with changed context */
+		ED_screen_full_newspace(C, CTX_wm_area(C), SPACE_IMAGE);
+		sa= CTX_wm_area(C);
+	}
+	else {
 	
-	if(sa==NULL) {
-		/* find largest open non-image area */
-		sa= biggest_non_image_area(C);
-		if(sa) {
-			ED_area_newspace(C, sa, SPACE_IMAGE);
-			sima= sa->spacedata.first;
-			
-			/* makes ESC go back to prev space */
-			sima->flag |= SI_PREVSPACE;
-		}
-		else {
-			/* use any area of decent size */
-			sa= biggest_area(C);
-			if(sa->spacetype!=SPACE_IMAGE) {
-				// XXX newspace(sa, SPACE_IMAGE);
+		sa= find_area_showing_r_result(C);
+		
+		if(sa==NULL) {
+			/* find largest open non-image area */
+			sa= biggest_non_image_area(C);
+			if(sa) {
+				ED_area_newspace(C, sa, SPACE_IMAGE);
 				sima= sa->spacedata.first;
 				
 				/* makes ESC go back to prev space */
 				sima->flag |= SI_PREVSPACE;
 			}
+			else {
+				/* use any area of decent size */
+				sa= biggest_area(C);
+				if(sa->spacetype!=SPACE_IMAGE) {
+					// XXX newspace(sa, SPACE_IMAGE);
+					sima= sa->spacedata.first;
+					
+					/* makes ESC go back to prev space */
+					sima->flag |= SI_PREVSPACE;
+				}
+			}
 		}
-	}
-	
+	}	
 	sima= sa->spacedata.first;
 	
 	/* get the correct image, and scale it */
 	sima->image= BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result");
 	
-	if(G.displaymode==2) { // XXX
-		if(sa->full==0) {
-			sima->flag |= SI_FULLWINDOW;
+//	if(G.displaymode==2) { // XXX
+		if(sa->full) {
+			sima->flag |= SI_FULLWINDOW|SI_PREVSPACE;
 			
-			ed_screen_fullarea(C, sa);
+//			ed_screen_fullarea(C, sa);
 		}
-	}
+//	}
 	
 }
 
@@ -2371,6 +2379,62 @@
 	MEM_freeN(rj);
 }
 
+/* str is IMA_RW_MAXTEXT in size */
+static void make_renderinfo_string(RenderStats *rs, Scene *scene, char *str)
+{
+	char info_time_str[32];	// used to be extern to header_info.c
+	uintptr_t mem_in_use, mmap_in_use;
+	float megs_used_memory, mmap_used_memory;
+	char *spos= str;
+	
+	mem_in_use= MEM_get_memory_in_use();
+	mmap_in_use= MEM_get_mapped_memory_in_use();
+	
+	megs_used_memory= (mem_in_use-mmap_in_use)/(1024.0*1024.0);
+	mmap_used_memory= (mmap_in_use)/(1024.0*1024.0);
+	
+	if(scene->lay & 0xFF000000)
+		spos+= sprintf(spos, "Localview | ");
+	else if(scene->r.scemode & R_SINGLE_LAYER)
+		spos+= sprintf(spos, "Single Layer | ");
+	
+	spos+= sprintf(spos, "Fra:%d  Ve:%d Fa:%d ", (scene->r.cfra), rs->totvert, rs->totface);
+	if(rs->tothalo) spos+= sprintf(spos, "Ha:%d ", rs->tothalo);
+	if(rs->totstrand) spos+= sprintf(spos, "St:%d ", rs->totstrand);
+	spos+= sprintf(spos, "La:%d Mem:%.2fM (%.2fM) ", rs->totlamp, megs_used_memory, mmap_used_memory);
+	
+	if(rs->curfield)
+		spos+= sprintf(spos, "Field %d ", rs->curfield);
+	if(rs->curblur)
+		spos+= sprintf(spos, "Blur %d ", rs->curblur);
+	
+	BLI_timestr(rs->lastframetime, info_time_str);
+	spos+= sprintf(spos, "Time:%s ", info_time_str);
+	
+	if(rs->infostr)
+		spos+= sprintf(spos, "| %s ", rs->infostr);
+	
+	/* very weak... but 512 characters is quite safe */
+	if(spos >= str+IMA_RW_MAXTEXT)
+		printf("WARNING! renderwin text beyond limit \n");
+	
+}
+
+static void image_renderinfo_cb(void *rjv, RenderStats *rs)
+{
+	RenderJob *rj= rjv;
+	
+	/* malloc OK here, stats_draw is not in tile threads */
+	if(rj->image->render_text==NULL)
+		rj->image->render_text= MEM_callocN(IMA_RW_MAXTEXT, "rendertext");
+	
+	make_renderinfo_string(rs, rj->scene, rj->image->render_text);
+	
+	/* make jobs timer to send notifier */
+	*(rj->do_update)= 1;
+
+}
+
 /* called inside thread! */
 static void image_rect_update(void *rjv, RenderResult *rr, volatile rcti *renrect)
 {
@@ -2552,6 +2616,8 @@
 	re= RE_NewRender(scene->id.name);
 	RE_test_break_cb(re, rj, render_breakjob);
 	RE_display_draw_cb(re, rj, image_rect_update);
+	RE_stats_draw_cb(re, rj, image_renderinfo_cb);
+	
 	rj->re= re;
 	G.afbreek= 0;
 	
@@ -2626,7 +2692,49 @@
 	ot->poll= ED_operator_image_active;
 }
 
+/* *********************** show render viewer *************** */
 
+static int render_view_show_exec(bContext *C, wmOperator *unused)
+{
+	ScrArea *sa= find_area_showing_r_result(C);
+	
+	/* determine if render already shows */
+	if(sa) {
+		SpaceImage *sima= sa->spacedata.first;
+		
+		if(sima->flag & SI_PREVSPACE) {
+			sima->flag &= ~SI_PREVSPACE;
+			
+			if(sima->flag & SI_FULLWINDOW) {
+				sima->flag &= ~SI_FULLWINDOW;
+				ED_screen_full_prevspace(C);
+			}
+			else if(sima->next) {
+				ED_area_newspace(C, sa, sima->next->spacetype);
+				ED_area_tag_redraw(sa);
+			}
+		}
+	}
+	else {
+		screen_set_image_output(C);
+	}
+	
+	return OPERATOR_FINISHED;
+}
+
+void SCREEN_OT_render_view_show(struct wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Show/Hide Render View";
+	ot->idname= "SCREEN_OT_render_view_show";
+	
+	/* api callbacks */
+	ot->exec= render_view_show_exec;
+	ot->poll= ED_operator_screenactive;
+}
+
+
+
 /* ****************  Assigning operatortypes to global list, adding handlers **************** */
 
 /* called in spacetypes.c */
@@ -2661,7 +2769,8 @@
 	/* render */
 	WM_operatortype_append(SCREEN_OT_render);
 	WM_operatortype_append(SCREEN_OT_render_view_cancel);
-	
+	WM_operatortype_append(SCREEN_OT_render_view_show);
+
 	/* tools shared by more space types */
 	WM_operatortype_append(ED_OT_undo);
 	WM_operatortype_append(ED_OT_redo);	
@@ -2722,6 +2831,7 @@
 	/* render */
 	WM_keymap_add_item(keymap, "SCREEN_OT_render", F12KEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "SCREEN_OT_render_view_cancel", ESCKEY, KM_PRESS, 0, 0);
+	WM_keymap_add_item(keymap, "SCREEN_OT_render_view_show", F11KEY, KM_PRESS, 0, 0);
 	
 	/* frame offsets & play */
 	keymap= WM_keymap_listbase(wm, "Frames", 0, 0);

Modified: branches/blender2.5/blender/source/blender/editors/space_image/image_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_image/image_draw.c	2009-07-10 16:42:51 UTC (rev 21492)
+++ branches/blender2.5/blender/source/blender/editors/space_image/image_draw.c	2009-07-10 16:55:49 UTC (rev 21493)
@@ -127,14 +127,13 @@
 	}
 }
 
-static void draw_render_info(SpaceImage *sima, ARegion *ar)
+static void draw_render_info(Image *ima, ARegion *ar)
 {
 	rcti rect;
 	float colf[3];
 	int showspare= 0; // XXX BIF_show_render_spare();
-	char *str= "render text"; // XXX BIF_render_text();
 	
-	if(str==NULL)
+	if(ima->render_text==NULL)
 		return;
 	
 	rect= ar->winrct;
@@ -152,10 +151,10 @@
 
 	if(showspare) {
 		UI_DrawString(12, rect.ymin + 5, "(Previous)");
-		UI_DrawString(72, rect.ymin + 5, str);
+		UI_DrawString(72, rect.ymin + 5, ima->render_text);
 	}
 	else
-		UI_DrawString(12, rect.ymin + 5, str);
+		UI_DrawString(12, rect.ymin + 5, ima->render_text);
 }
 
 void draw_image_info(ARegion *ar, int channels, int x, int y, char *cp, float *fp, int *zp, float *zpf)
@@ -685,8 +684,8 @@
 	draw_image_paint_helpers(sima, ar, scene, zoomx, zoomy);
 
 	/* render info */
-	if(ibuf && show_render)
-		draw_render_info(sima, ar);
+	if(ibuf && ima && show_render)
+		draw_render_info(ima, ar);
 
 	/* XXX integrate this code */
 #if 0

Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_image_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesdna/DNA_image_types.h	2009-07-10 16:42:51 UTC (rev 21492)
+++ branches/blender2.5/blender/source/blender/makesdna/DNA_image_types.h	2009-07-10 16:55:49 UTC (rev 21493)
@@ -87,6 +87,9 @@
 	struct PackedFile * packedfile;
 	struct PreviewImage * preview;
 
+	/* not saved in file, statistics for render result */
+	char *render_text;
+	
 	float lastupdate;
 	int lastused;
 	short animspeed;
@@ -120,5 +123,9 @@
 
 /* ima->type and ima->source moved to BKE_image.h, for API */
 
+/* render_text maxlen */
+#define IMA_RW_MAXTEXT           512
+
+
 #endif
 

Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list