Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2003-12-03 18:44:11 +0300
committerTon Roosendaal <ton@blender.org>2003-12-03 18:44:11 +0300
commit50b6f0aa33464deb61efc15ce00cff8fb90b3448 (patch)
treee45f4fbd2d519657437b92a570c6b0f6f9ff939f /source/blender/src/renderwin.c
parentff03e823ac668a726ec7de0803e375691193d942 (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.c29
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);