diff options
author | Ton Roosendaal <ton@blender.org> | 2003-12-03 18:44:11 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2003-12-03 18:44:11 +0300 |
commit | 50b6f0aa33464deb61efc15ce00cff8fb90b3448 (patch) | |
tree | e45f4fbd2d519657437b92a570c6b0f6f9ff939f /source/blender/src/renderwin.c | |
parent | ff03e823ac668a726ec7de0803e375691193d942 (diff) |
- another oldie! Bug 475, which was wrongly categorized by me as OpenGL
error... Jesterking report helped me finding the mistake! We found out
that pressing F12 while rendering is in progress, crashes...
Hi Yamyam,
I beg you to forgive me! Totally misread the report... the error was only
in pressing F12 *during* rendering, it even restarts a render then. This
happens always, no matter what is being rendered.
I found the code for renderwindow doesn't use queues to store events, like
in the rest of Blender, but immediately executes incoming events. This
means you can even press ZKEY (zoom) or F11 (hide) while rendering.
In CVS I've committed a patch that checks if Blender renders, before
allowing to execute the F12 event. Also now blocked is F3 (!) during render.
The other options (zoom, push window) still work.
-Ton-
Diffstat (limited to 'source/blender/src/renderwin.c')
-rw-r--r-- | source/blender/src/renderwin.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/source/blender/src/renderwin.c b/source/blender/src/renderwin.c index bdb60084b98..3ee26c77286 100644 --- a/source/blender/src/renderwin.c +++ b/source/blender/src/renderwin.c @@ -352,11 +352,9 @@ static void renderwin_handler(Window *win, void *user_data, short evt, short val } else if (evt==REDRAW) { renderwin_draw(rw, 0); -// #ifndef __APPLE__ } else if (evt==WINCLOSE) { BIF_close_render_display(); -// #endif } else if (evt==INPUTCHANGE) { rw->active= val; @@ -389,7 +387,7 @@ static void renderwin_handler(Window *win, void *user_data, short evt, short val } } else if (evt==JKEY) { - BIF_swap_render_rects(); + if(R.flag==0) BIF_swap_render_rects(); } else if (evt==ZKEY) { if (rw->flags&RW_FLAGS_OLDZOOM) { @@ -422,17 +420,20 @@ static void renderwin_handler(Window *win, void *user_data, short evt, short val renderwin_reset_view(rw); } else if (evt==F3KEY) { - mainwindow_raise(); - mainwindow_make_active(); - rw->active= 0; - areawinset(find_biggest_area()->win); - BIF_save_rendered_image(); + if(R.flag==0) { + mainwindow_raise(); + mainwindow_make_active(); + rw->active= 0; + areawinset(find_biggest_area()->win); + BIF_save_rendered_image(); + } } else if (evt==F11KEY) { BIF_toggle_render_display(); } else if (evt==F12KEY) { - BIF_do_render(0); + /* if it's rendering, this flag is set */ + if(R.flag==0) BIF_do_render(0); } } } @@ -687,8 +688,10 @@ static int test_break() if (G.afbreek==0 && render_win) { /* tests window */ winlay_process_events(0); // render_win can be closed in winlay_process_events() - if (render_win == 0 || (render_win->flags & RW_FLAGS_ESCAPE)) + if (render_win == 0 || (render_win->flags & RW_FLAGS_ESCAPE)) { G.afbreek= 1; + printf("break true\n"); + } } } @@ -779,6 +782,10 @@ static void end_test_break_callback() static void do_render(View3D *ogl_render_view3d, int anim, int force_dispwin) { + + /* we set this flag to prevent renderwindow queue to execute another render */ + R.flag= R_RENDERING; + if (R.displaymode == R_DISPLAYWIN || force_dispwin) { RE_set_initrenderdisplay_callback(NULL); RE_set_clearrenderdisplay_callback(renderwin_clear_display_cb); @@ -787,9 +794,7 @@ static void do_render(View3D *ogl_render_view3d, int anim, int force_dispwin) renderwin_init_display_cb(); } else { -// #ifndef __APPLE__ BIF_close_render_display(); -// #endif RE_set_initrenderdisplay_callback(renderview_init_display_cb); RE_set_clearrenderdisplay_callback(NULL); RE_set_renderdisplay_callback(renderview_progress_display_cb); |