From 50b6f0aa33464deb61efc15ce00cff8fb90b3448 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 3 Dec 2003 15:44:11 +0000 Subject: [PATCH] - 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- --- source/blender/src/renderwin.c | 29 +++++++++++++++++------------ 1 file 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);