[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58331] trunk/blender/source/blender/ editors/render/render_opengl.c: fix/resolve [#36173] Current frame doesn' t update while OpenGL Rendering Animation

Campbell Barton ideasman42 at gmail.com
Wed Jul 17 11:57:02 CEST 2013


Revision: 58331
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58331
Author:   campbellbarton
Date:     2013-07-17 09:57:02 +0000 (Wed, 17 Jul 2013)
Log Message:
-----------
fix/resolve [#36173] Current frame doesn't update while OpenGL Rendering Animation

there was no feedback to the user about the current frame rendering, for longer renders this is no good.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/render/render_opengl.c

Modified: trunk/blender/source/blender/editors/render/render_opengl.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_opengl.c	2013-07-17 09:31:57 UTC (rev 58330)
+++ trunk/blender/source/blender/editors/render/render_opengl.c	2013-07-17 09:57:02 UTC (rev 58331)
@@ -107,6 +107,10 @@
 	bMovieHandle *mh;
 	int cfrao, nfra;
 
+	/* wm vars for timer and progress cursor */
+	wmWindowManager *wm;
+	wmWindow *win;
+
 	wmTimer *timer; /* use to check if running modal or not (invoke'd or exec'd)*/
 } OGLRender;
 
@@ -327,6 +331,9 @@
 static int screen_opengl_render_init(bContext *C, wmOperator *op)
 {
 	/* new render clears all callbacks */
+	wmWindowManager *wm = CTX_wm_manager(C);
+	wmWindow *win = CTX_wm_window(C);
+
 	Scene *scene = CTX_data_scene(C);
 	ScrArea *prevsa = CTX_wm_area(C);
 	ARegion *prevar = CTX_wm_region(C);
@@ -353,7 +360,7 @@
 	}
 
 	/* only one render job at a time */
-	if (WM_jobs_test(CTX_wm_manager(C), scene, WM_JOB_TYPE_RENDER))
+	if (WM_jobs_test(wm, scene, WM_JOB_TYPE_RENDER))
 		return 0;
 	
 	if (!is_view_context && scene->camera == NULL) {
@@ -367,7 +374,7 @@
 	}
 
 	/* stop all running jobs, except screen one. currently previews frustrate Render */
-	WM_jobs_kill_all_except(CTX_wm_manager(C), CTX_wm_screen(C));
+	WM_jobs_kill_all_except(wm, CTX_wm_screen(C));
 
 	/* create offscreen buffer */
 	sizex = (scene->r.size * scene->r.xsch) / 100;
@@ -381,9 +388,6 @@
 		return 0;
 	}
 
-	/* handle UI stuff */
-	WM_cursor_wait(1);
-
 	/* allocate opengl render */
 	oglrender = MEM_callocN(sizeof(OGLRender), "OGLRender");
 	op->customdata = oglrender;
@@ -441,6 +445,10 @@
 		rr->rectf = MEM_callocN(sizeof(float) * 4 * sizex * sizey, "screen_opengl_render_init rect");
 	RE_ReleaseResult(oglrender->re);
 
+	/* wm vars */
+	oglrender->wm = wm;
+	oglrender->win = win;
+
 	return 1;
 }
 
@@ -458,10 +466,13 @@
 		scene->r.cfra = oglrender->cfrao;
 		BKE_scene_update_for_newframe(bmain, scene, screen_opengl_layers(oglrender));
 
-		WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), oglrender->timer);
+		WM_event_remove_timer(oglrender->wm, oglrender->win, oglrender->timer);
 	}
 
-	WM_cursor_wait(0);
+	if (oglrender->win) {
+		WM_cursor_restore(oglrender->win);
+	}
+
 	WM_event_add_notifier(C, NC_SCENE | ND_RENDER_RESULT, oglrender->scene);
 
 	U.obcenter_dia = oglrender->obcenter_dia_back;
@@ -549,6 +560,10 @@
 		}
 	}
 
+	if (oglrender->win) {
+		WM_cursor_time(oglrender->win, scene->r.cfra);
+	}
+
 	BKE_scene_update_for_newframe(bmain, scene, screen_opengl_layers(oglrender));
 
 	if (view_context) {
@@ -714,7 +729,7 @@
 	render_view_open(C, event->x, event->y);
 	
 	WM_event_add_modal_handler(C, op);
-	oglrender->timer = WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f);
+	oglrender->timer = WM_event_add_timer(oglrender->wm, oglrender->win, TIMER, 0.01f);
 	
 	return OPERATOR_RUNNING_MODAL;
 }




More information about the Bf-blender-cvs mailing list