[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