From: Toni Wilen Date: Wed, 9 Jul 2025 15:54:25 +0000 (+0300) Subject: Unlock drawing buffer when GUI or dialogs are opened. (Fullscreen F12 crash fix)... X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=563caf6a49d46021d318a8427e87633d52d72c87;p=francis%2Fwinuae.git Unlock drawing buffer when GUI or dialogs are opened. (Fullscreen F12 crash fix). Simplify locking. --- diff --git a/custom.cpp b/custom.cpp index 4c63f664..79948376 100644 --- a/custom.cpp +++ b/custom.cpp @@ -5056,18 +5056,13 @@ static void vsync_display_render(void) vsyncmintimepre = read_processor_time(); if (!custom_disabled) { - if (!has_draw_denise()) { - start_draw_denise(); - } + start_draw_denise(); draw_denise_vsync_queue(display_redraw); display_redraw = false; } draw_denise_line_queue_flush(); - - if (has_draw_denise()) { - end_draw_denise(); - } + end_draw_denise(); vsync_handler_render(); if (!custom_disabled) { start_draw_denise(); @@ -6996,10 +6991,7 @@ void custom_reset(bool hardreset, bool keyboardreset) setmaxhpos(); resetfulllinestate(); updateprghpostable(); - - if (!has_draw_denise()) { - start_draw_denise(); - } + start_draw_denise(); #ifdef ACTION_REPLAY /* Doing this here ensures we can use the 'reset' command from within AR */ @@ -10991,9 +10983,7 @@ static void dmal_fast(void) static void do_draw_line(void) { - if (!has_draw_denise()) { - start_draw_denise(); - } + start_draw_denise(); if (custom_fastmode_exit) { custom_fastmode_exit = 0; @@ -12737,8 +12727,5 @@ bool ispal(int *lines) void custom_end_drawing(void) { draw_denise_line_queue_flush(); - if (has_draw_denise()) { - write_log("flushing denise draw queue\n"); - end_draw_denise(); - } + end_draw_denise(); } diff --git a/drawing.cpp b/drawing.cpp index 66c5510b..e9819080 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -5031,11 +5031,6 @@ void denise_restore_registers(void) expand_fmode(s_fmode); } -bool has_draw_denise(void) -{ - return thread_debug_lock; -} - void set_drawbuffer(void) { struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; @@ -5060,12 +5055,12 @@ bool start_draw_denise(void) struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; struct vidbuffer *vb = &vidinfo->drawbuffer; - vidinfo->outbuffer = vb; - if (thread_debug_lock) { - write_log("start_draw_denise: thread_debug_lock already set!"); + return true; } + vidinfo->outbuffer = vb; + if (!lockscr(vb, false, display_reset > 0)) { return false; } @@ -5089,10 +5084,6 @@ void end_draw_denise(void) struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; struct vidbuffer *vb = &vidinfo->drawbuffer; - if (!thread_debug_lock) { - write_log("end_draw_denise: thread_debug_lock not set!\n"); - } - draw_denise_line_queue_flush(); thread_debug_lock = false; diff --git a/include/drawing.h b/include/drawing.h index 3375d638..0b67eb7f 100644 --- a/include/drawing.h +++ b/include/drawing.h @@ -183,7 +183,6 @@ void draw_denise_border_line_fast(int gfx_ypos, enum nln_how how, struct linesta void draw_denise_border_line_fast_queue(int gfx_ypos, enum nln_how how, struct linestate *ls); bool start_draw_denise(void); void end_draw_denise(void); -bool has_draw_denise(void); void denise_reset(bool); bool denise_update_reg_queued(uae_u16 reg, uae_u16 v, uae_u32 linecnt); void denise_store_registers(void); diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index 3dfa4cb9..1b6b5db6 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -2309,6 +2309,7 @@ static void m(int monid) static void flipgui(int opengui) { + end_draw_denise(); D3D_guimode(0, opengui); if (full_property_sheet) return;