diff --git a/console/rarch_console.h b/console/rarch_console.h index 5d56683f7d..9062b3c040 100644 --- a/console/rarch_console.h +++ b/console/rarch_console.h @@ -73,6 +73,7 @@ enum MODE_INIT, MODE_MENU, MODE_MENU_PREINIT, + MODE_MENU_DRAW, MODE_EXIT, MODE_LOAD_FIRST_SHADER, MODE_LOAD_SECOND_SHADER, diff --git a/frontend/menu/rmenu.c b/frontend/menu/rmenu.c index cdf7af80ed..9bd0486618 100644 --- a/frontend/menu/rmenu.c +++ b/frontend/menu/rmenu.c @@ -1935,13 +1935,18 @@ int ingame_menu_resize(void *data, void *state) if (input & (1ULL << RMENU_DEVICE_NAV_A)) { menu_stack_pop(); - g_extern.draw_menu = true; + g_extern.lifecycle_menu_state |= (1 << MODE_MENU_DRAW); } if((input & (1ULL << RMENU_DEVICE_NAV_Y))) - g_extern.draw_menu = !g_extern.draw_menu; + { + if (g_extern.lifecycle_menu_state & (1 << MODE_MENU_DRAW)) + g_extern.lifecycle_menu_state &= ~(1 << MODE_MENU_DRAW); + else + g_extern.lifecycle_menu_state |= (1 << MODE_MENU_DRAW); + } - if(g_extern.draw_menu) + if(g_extern.lifecycle_menu_state & (1 << MODE_MENU_DRAW)) { char viewport_x[32], viewport_y[32], viewport_w[32], viewport_h[32]; char msg[256]; @@ -2024,14 +2029,14 @@ int ingame_menu_screenshot(void *data, void *state) DEVICE_CAST device_ptr = (DEVICE_CAST)driver.video_data; filebrowser_t *filebrowser = NULL; - g_extern.draw_menu = false; + g_extern.lifecycle_menu_state &= ~(1 << MODE_MENU_DRAW); if(g_extern.console.rmenu.state.ingame_menu.enable) { if(input & (1ULL << RMENU_DEVICE_NAV_A)) { menu_stack_pop(); - g_extern.draw_menu = true; + g_extern.lifecycle_menu_state |= (1 << MODE_MENU_DRAW); } if(input & (1ULL << RMENU_DEVICE_NAV_B)) @@ -2424,10 +2429,8 @@ bool rmenu_iterate(void) menu_stack_push(INGAME_MENU); menu_stack_force_refresh(); - g_extern.draw_menu = true; - + g_extern.lifecycle_menu_state |= (1 << MODE_MENU_DRAW); device_ptr->ctx_driver->rmenu_init(); - g_extern.lifecycle_menu_state &= ~(1 << MODE_MENU_PREINIT); } @@ -2438,7 +2441,7 @@ bool rmenu_iterate(void) rmenu_default_positions_t default_pos; device_ptr->ctx_driver->rmenu_set_default_pos(&default_pos); - if (g_extern.draw_menu) + if (g_extern.lifecycle_menu_state & (1 << MODE_MENU_DRAW)) device_ptr->ctx_driver->set_blend(true); rarch_render_cached_frame(); @@ -2484,7 +2487,7 @@ bool rmenu_iterate(void) frame_count = 0; device_ptr->ctx_driver->check_window(&quit, &resize, &width, &height, frame_count); - if (g_extern.draw_menu) + if (g_extern.lifecycle_menu_state & (1 << MODE_MENU_DRAW)) device_ptr->ctx_driver->set_blend(false); if (quit) @@ -2506,7 +2509,7 @@ deinit: if(g_extern.console.rmenu.state.ingame_menu.enable) menu_stack_pop(); - g_extern.draw_menu = false; + g_extern.lifecycle_menu_state &= ~(1 << MODE_MENU_DRAW); g_extern.console.rmenu.state.ingame_menu.enable = false; device_ptr->ctx_driver->rmenu_free(); diff --git a/frontend/menu/rmenu_gx.c b/frontend/menu/rmenu_gx.c index 81dc2ff94a..1cbed016a4 100644 --- a/frontend/menu/rmenu_gx.c +++ b/frontend/menu/rmenu_gx.c @@ -171,7 +171,7 @@ bool rmenu_iterate(void) static bool initial_held = true; static bool first_held = false; - g_extern.draw_menu = true; + g_extern.lifecycle_menu_state |= (1 << MODE_MENU_DRAW); driver.video->apply_state_changes(); g_extern.frame_count++; @@ -265,7 +265,7 @@ deinit: if (!(g_extern.lifecycle_state & (1ULL << RARCH_FRAMEADVANCE))) g_extern.delay_timer[0] = g_extern.frame_count + 30; - g_extern.draw_menu = false; + g_extern.lifecycle_menu_state &= ~(1 << MODE_MENU_DRAW); g_extern.console.rmenu.state.ingame_menu.enable = false; return false; diff --git a/frontend/menu/rmenu_xui.cpp b/frontend/menu/rmenu_xui.cpp index be905b89f1..bf7902faf1 100644 --- a/frontend/menu/rmenu_xui.cpp +++ b/frontend/menu/rmenu_xui.cpp @@ -1171,8 +1171,7 @@ bool rmenu_iterate(void) if (g_extern.lifecycle_menu_state & (1 << MODE_MENU_PREINIT)) { g_extern.console.rmenu.input_loop = INPUT_LOOP_MENU; - g_extern.draw_menu = true; - + g_extern.lifecycle_menu_state |= (1 << MODE_MENU_DRAW); g_extern.lifecycle_menu_state &= ~(1 << MODE_MENU_PREINIT); } @@ -1239,7 +1238,7 @@ deinit: g_extern.delay_timer[0] = g_extern.frame_count + 30; g_extern.console.rmenu.state.ingame_menu.enable = false; - g_extern.draw_menu = false; + g_extern.lifecycle_menu_state &= ~(1 << MODE_MENU_DRAW); return false; } diff --git a/frontend/platform/platform_gx.c b/frontend/platform/platform_gx.c index e7ad82ec7c..75c16abd4a 100644 --- a/frontend/platform/platform_gx.c +++ b/frontend/platform/platform_gx.c @@ -378,10 +378,9 @@ static void system_process_args(int argc, char *argv[]) rarch_console_load_game_wrap(rom, g_extern.file_state.zip_extract_mode); rgui_iterate(rgui, RGUI_ACTION_MESSAGE); - g_extern.draw_menu = true; + g_extern.lifecycle_menu_state |= (1 << MODE_MENU_DRAW); rarch_render_cached_frame(); - g_extern.draw_menu = false; - + g_extern.lifecycle_menu_state &= ~(1 << MODE_MENU_DRAW); g_extern.lifecycle_menu_state = (1 << MODE_INIT); } else diff --git a/general.h b/general.h index 3066a27891..b9e5d650c8 100644 --- a/general.h +++ b/general.h @@ -562,7 +562,6 @@ struct global #endif } console; - bool draw_menu; uint64_t lifecycle_state; uint32_t lifecycle_menu_state; diff --git a/gfx/gl.c b/gfx/gl.c index 456ff80154..39fe625c4a 100644 --- a/gfx/gl.c +++ b/gfx/gl.c @@ -1285,7 +1285,7 @@ static bool gl_frame(void *data, const void *frame, unsigned width, unsigned hei RARCH_PERFORMANCE_STOP(frame_run); #ifdef HAVE_RMENU - if (g_extern.draw_menu) + if (g_extern.lifecycle_menu_state & (1 << MODE_MENU_DRAW)) context_rmenu_frame_func(gl); else #endif diff --git a/gx/gx_input.c b/gx/gx_input.c index 5808a17632..b550bd261a 100644 --- a/gx/gx_input.c +++ b/gx/gx_input.c @@ -333,7 +333,7 @@ static void gx_input_poll(void *data) *state_cur |= GX_QUIT_KEY; //TODO: Hack, analog stick twitchiness needs to be properly fixed - if(g_extern.draw_menu) + if(g_extern.lifecycle_menu_state & (1 << MODE_MENU_DRAW)) { s8 x = gx_stick_x(exp->classic.ljs); s8 y = gx_stick_y(exp->classic.ljs); diff --git a/gx/gx_video.c b/gx/gx_video.c index b59792935a..a3e5f1ce76 100644 --- a/gx/gx_video.c +++ b/gx/gx_video.c @@ -303,7 +303,7 @@ static void init_texture(unsigned width, unsigned height) gx_video_t *gx = (gx_video_t*)driver.video_data; unsigned g_filter = g_settings.video.smooth ? GX_LINEAR : GX_NEAR; - GX_InitTexObj(&g_tex.obj, g_tex.data, width, height, (gx->rgb32) ? GX_TF_RGBA8 : (g_extern.draw_menu) ? GX_TF_RGB5A3 : GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); + GX_InitTexObj(&g_tex.obj, g_tex.data, width, height, (gx->rgb32) ? GX_TF_RGBA8 : (g_extern.lifecycle_menu_state & (1 << MODE_MENU_DRAW)) ? GX_TF_RGB5A3 : GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); GX_InitTexObjLOD(&g_tex.obj, g_filter, g_filter, 0, 0, 0, GX_TRUE, GX_FALSE, GX_ANISO_1); GX_InitTexObj(&menu_tex.obj, menu_tex.data, RGUI_WIDTH, RGUI_HEIGHT, GX_TF_RGB5A3, GX_CLAMP, GX_CLAMP, GX_FALSE); GX_InitTexObjLOD(&menu_tex.obj, g_filter, g_filter, 0, 0, 0, GX_TRUE, GX_FALSE, GX_ANISO_1); @@ -876,7 +876,7 @@ static bool gx_frame(void *data, const void *frame, else gx->msg[0] = 0; - if(!frame && !g_extern.draw_menu) + if(!frame && !(g_extern.lifecycle_menu_state & (1 << MODE_MENU_DRAW))) return true; if (!frame) @@ -888,7 +888,7 @@ static bool gx_frame(void *data, const void *frame, clear_efb = GX_TRUE; } - while ((g_vsync || g_extern.draw_menu) && !g_draw_done) + while ((g_vsync || (g_extern.lifecycle_menu_state & (1 << MODE_MENU_DRAW))) && !g_draw_done) LWP_ThreadSleep(g_video_cond); if (width != gx_old_width || height != gx_old_height) @@ -905,14 +905,14 @@ static bool gx_frame(void *data, const void *frame, { if (gx->rgb32) convert_texture32(frame, g_tex.data, width, height, pitch); - else if (g_extern.draw_menu) + else if (g_extern.lifecycle_menu_state & (1 << MODE_MENU_DRAW)) convert_texture16_conv(frame, g_tex.data, width, height, pitch); else convert_texture16(frame, g_tex.data, width, height, pitch); DCFlushRange(g_tex.data, height * (width << (gx->rgb32 ? 2 : 1))); } - if (g_extern.draw_menu) + if (g_extern.lifecycle_menu_state & (1 << MODE_MENU_DRAW)) { convert_texture16(gx->menu_data, menu_tex.data, RGUI_WIDTH, RGUI_HEIGHT, RGUI_WIDTH * 2); DCFlushRange(menu_tex.data, RGUI_WIDTH * RGUI_HEIGHT * 2); @@ -927,7 +927,7 @@ static bool gx_frame(void *data, const void *frame, GX_DrawDone(); } - if(g_extern.draw_menu) + if(g_extern.lifecycle_menu_state & (1 << MODE_MENU_DRAW)) { GX_LoadTexObj(&menu_tex.obj, GX_TEXMAP0); GX_CallDispList(display_list, display_list_size); diff --git a/xdk/xdk_d3d.cpp b/xdk/xdk_d3d.cpp index c85c384f55..598ac6d8a8 100644 --- a/xdk/xdk_d3d.cpp +++ b/xdk/xdk_d3d.cpp @@ -895,7 +895,7 @@ static bool xdk_d3d_frame(void *data, const void *frame, if (msg) d3d->font_ctx->render_msg_place(d3d, msg_width, msg_height, 0.0f, 0, msg); - if (g_extern.draw_menu) + if (g_extern.lifecycle_menu_state & (1 << MODE_MENU_DRAW)) { #ifdef _XBOX360 app.Render();