diff --git a/frontend/frontend.c b/frontend/frontend.c index 9ac691d9ad..f0795aea01 100644 --- a/frontend/frontend.c +++ b/frontend/frontend.c @@ -155,7 +155,7 @@ int main_entry_iterate(signature(), args_type() args) } else if (g_extern.lifecycle_state & (1ULL << MODE_LOAD_GAME)) { - load_menu_game_prepare(); + load_menu_game_prepare(driver.video_data); if (load_menu_game()) { @@ -225,7 +225,7 @@ int main_entry_iterate(signature(), args_type() args) } else if (g_extern.lifecycle_state & (1ULL << MODE_MENU)) { - if (menu_iterate()) + if (menu_iterate(driver.video_data)) { if (frontend_ctx && frontend_ctx->process_events) frontend_ctx->process_events(args); @@ -256,7 +256,7 @@ void main_exit(args_type() args) #ifdef HAVE_MENU g_extern.system.shutdown = false; - menu_free(); + menu_free(driver.video_data); if (g_extern.config_save_on_exit && *g_extern.config_path) { @@ -334,7 +334,7 @@ returntype main_entry(signature()) #if defined(HAVE_MENU) if (menu_init_enable) - menu_init(); + menu_init(driver.video_data); if (frontend_ctx && frontend_ctx->process_args) frontend_ctx->process_args(argc, argv, args); diff --git a/frontend/menu/disp/lakka.c b/frontend/menu/disp/lakka.c index 01beaa63a3..c9aba574c0 100644 --- a/frontend/menu/disp/lakka.c +++ b/frontend/menu/disp/lakka.c @@ -199,7 +199,7 @@ static void lakka_render_background(rgui_handle_t *rgui) rgui->width - 10, 5, 5, rgui->height - 10, green_filler); } -static void lakka_render_messagebox(void *data, const char *message) +static void lakka_render_messagebox(void *data, void *video_data, const char *message) { rgui_handle_t *rgui = (rgui_handle_t*)data; size_t i; @@ -351,11 +351,11 @@ void lakka_draw_icon(void *data, GLuint texture, float x, float y, float alpha, gl_set_viewport(gl, gl->win_width, gl->win_height, 0, 0); } -static void lakka_render(void *data) +static void lakka_render(void *data, void *video_data) { rgui_handle_t *rgui = (rgui_handle_t*)data; - gl_t *gl = (gl_t*)driver.video_data; + gl_t *gl = (gl_t*)video_data; gl_set_viewport(gl, gl->win_width, gl->win_height, 0, 0); @@ -625,16 +625,16 @@ static void lakka_render(void *data) if (!str) str = ""; snprintf(msg, sizeof(msg), "%s\n%s", rgui->keyboard.label, str); - lakka_render_messagebox(rgui, msg); + lakka_render_messagebox(rgui, video_data, msg); } } -static void lakka_set_texture(void *data, bool enable) +static void lakka_set_texture(void *data, void *video_data, bool enable) { rgui_handle_t *rgui = (rgui_handle_t*)data; if (driver.video_poke && driver.video_poke->set_texture_enable) - driver.video_poke->set_texture_frame(driver.video_data, menu_framebuf, + driver.video_poke->set_texture_frame(video_data, menu_framebuf, enable, rgui->width, rgui->height, 1.0f); } @@ -653,7 +653,7 @@ static void lakka_init_assets(void *data) lakka_set_texture(rgui, true); } -static void *lakka_init(void) +static void *lakka_init(void *video_data) { uint16_t *framebuf = menu_framebuf; size_t framebuf_pitch; diff --git a/frontend/menu/disp/rgui.c b/frontend/menu/disp/rgui.c index 6058bd8049..0c85a2ab6d 100644 --- a/frontend/menu/disp/rgui.c +++ b/frontend/menu/disp/rgui.c @@ -191,7 +191,7 @@ static void rgui_render_background(rgui_handle_t *rgui) rgui->width - 10, 5, 5, rgui->height - 10, green_filler); } -static void rgui_render_messagebox(void *data, const char *message) +static void rgui_render_messagebox(void *data, void *video_data, const char *message) { rgui_handle_t *rgui = (rgui_handle_t*)data; size_t i; @@ -258,7 +258,7 @@ static void rgui_render_messagebox(void *data, const char *message) string_list_free(list); } -static void rgui_render(void *data) +static void rgui_render(void *data, void *video_data) { rgui_handle_t *rgui = (rgui_handle_t*)data; @@ -526,7 +526,7 @@ static void rgui_render(void *data) else message_queue = driver.current_msg; - rgui_render_messagebox(rgui, message_queue); + rgui_render_messagebox(rgui, video_data, message_queue); #endif if (rgui->keyboard.display) @@ -536,11 +536,11 @@ static void rgui_render(void *data) if (!str) str = ""; snprintf(msg, sizeof(msg), "%s\n%s", rgui->keyboard.label, str); - rgui_render_messagebox(rgui, msg); + rgui_render_messagebox(rgui, video_data, msg); } } -static void *rgui_init(void) +static void *rgui_init(void *video_data) { uint16_t *framebuf = menu_framebuf; size_t framebuf_pitch; @@ -592,12 +592,12 @@ static int rgui_input_postprocess(void *data, uint64_t old_state) return ret; } -void rgui_set_texture(void *data, bool enable) +void rgui_set_texture(void *data, void *video_data, bool enable) { rgui_handle_t *rgui = (rgui_handle_t*)data; if (driver.video_poke && driver.video_poke->set_texture_enable) - driver.video_poke->set_texture_frame(driver.video_data, menu_framebuf, + driver.video_poke->set_texture_frame(video_data, menu_framebuf, enable, rgui->width, rgui->height, 1.0f); } diff --git a/frontend/menu/disp/rmenu.c b/frontend/menu/disp/rmenu.c index 2e545890e6..cc874cee8e 100644 --- a/frontend/menu/disp/rmenu.c +++ b/frontend/menu/disp/rmenu.c @@ -70,7 +70,7 @@ static void rmenu_render_background(rgui_handle_t *rgui) { } -static void rmenu_render_messagebox(void *data, const char *message) +static void rmenu_render_messagebox(void *data, void *video_data, const char *message) { font_params_t font_parms; @@ -108,14 +108,13 @@ static void rmenu_render_messagebox(void *data, const char *message) font_parms.color = WHITE; if (driver.video_poke && driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, msg, &font_parms); + driver.video_poke->set_osd_msg(video_data, msg, &font_parms); } render_normal = false; - } -static void rmenu_render(void *data) +static void rmenu_render(void *data, void *video_data) { if (!render_normal) { @@ -248,7 +247,7 @@ static void rmenu_render(void *data) font_parms.color = WHITE; if (driver.video_poke && driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, title_buf, &font_parms); + driver.video_poke->set_osd_msg(video_data, title_buf, &font_parms); char title_msg[64]; const char *core_name = rgui->info.library_name; @@ -271,7 +270,7 @@ static void rmenu_render(void *data) snprintf(title_msg, sizeof(title_msg), "%s - %s %s", PACKAGE_VERSION, core_name, core_version); if (driver.video_poke && driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, title_msg, &font_parms); + driver.video_poke->set_osd_msg(video_data, title_msg, &font_parms); size_t i, j; @@ -386,16 +385,16 @@ static void rmenu_render(void *data) font_parms.color = WHITE; if (driver.video_poke && driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, message, &font_parms); + driver.video_poke->set_osd_msg(video_data, message, &font_parms); font_parms.x = POSITION_EDGE_CENTER + POSITION_OFFSET; if (driver.video_poke && driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, type_str_buf, &font_parms); + driver.video_poke->set_osd_msg(video_data, type_str_buf, &font_parms); } } -void rmenu_set_texture(void *data, bool enable) +void rmenu_set_texture(void *data, void *video_data, bool enable) { rgui_handle_t *rgui = (rgui_handle_t*)data; @@ -404,13 +403,13 @@ void rmenu_set_texture(void *data, bool enable) if (driver.video_poke && driver.video_poke->set_texture_enable) { - driver.video_poke->set_texture_frame(driver.video_data, menu_texture->pixels, + driver.video_poke->set_texture_frame(video_data, menu_texture->pixels, enable, rgui->width, rgui->height, 1.0f); menu_texture_inited = true; } } -static void rmenu_init_assets(void *data) +static void rmenu_init_assets(void *data, void *video_data) { rgui_handle_t *rgui = (rgui_handle_t*)data; @@ -422,14 +421,14 @@ static void rmenu_init_assets(void *data) rgui->width = menu_texture->width; rgui->height = menu_texture->height; - rmenu_set_texture(rgui, true); + rmenu_set_texture(rgui, video_data, true); } -static void *rmenu_init(void) +static void *rmenu_init(void *video_data) { rgui_handle_t *rgui = (rgui_handle_t*)calloc(1, sizeof(*rgui)); - rmenu_init_assets(rgui); + rmenu_init_assets(rgui, video_data); return rgui; } diff --git a/frontend/menu/disp/rmenu_xui.cpp b/frontend/menu/disp/rmenu_xui.cpp index e5740cbb5d..38d71b357f 100644 --- a/frontend/menu/disp/rmenu_xui.cpp +++ b/frontend/menu/disp/rmenu_xui.cpp @@ -148,7 +148,7 @@ HRESULT CRetroArchMain::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) return 0; } -static void* rmenu_xui_init (void) +static void* rmenu_xui_init(void *video_data) { HRESULT hr; @@ -159,7 +159,7 @@ static void* rmenu_xui_init (void) return NULL; } - xdk_d3d_video_t *d3d= (xdk_d3d_video_t*)driver.video_data; + xdk_d3d_video_t *d3d= (xdk_d3d_video_t*)video_data; bool hdmenus_allowed = (g_extern.lifecycle_state & (1ULL << MODE_MENU_HD)); @@ -227,7 +227,7 @@ static void* rmenu_xui_init (void) } if (driver.video_poke && driver.video_poke->set_texture_enable) - driver.video_poke->set_texture_frame(driver.video_data, NULL, + driver.video_poke->set_texture_frame(video_data, NULL, true, 0, 0, 1.0f); return rgui; @@ -307,18 +307,20 @@ int x, int y, const char *message, bool green) { } -static void rmenu_xui_render_background(rgui_handle_t *rgui) -{ - (void)rgui; -} - -static void rmenu_xui_render_messagebox(void *data, const char *message) +static void rmenu_xui_render_background(void *data, void *video_data) { (void)data; + (void)video_data; +} + +static void rmenu_xui_render_messagebox(void *data, void *video_data, const char *message) +{ + (void)data; + (void)video_data; (void)message; } -static void rmenu_xui_render(void *data) +static void rmenu_xui_render(void *data, void *video_data) { rgui_handle_t *rgui = (rgui_handle_t*)data; @@ -330,7 +332,7 @@ static void rmenu_xui_render(void *data) size_t begin = rgui->selection_ptr; size_t end = rgui->selection_buf->size; - rmenu_xui_render_background(rgui); + rmenu_xui_render_background(rgui, video_data); char title[256]; const char *dir = NULL; @@ -578,7 +580,7 @@ static void rmenu_xui_render(void *data) if (!str) str = ""; snprintf(msg, sizeof(msg), "%s\n%s", rgui->keyboard.label, str); - rmenu_xui_render_messagebox(rgui, msg); + rmenu_xui_render_messagebox(rgui, video_data, msg); } } diff --git a/frontend/menu/menu_common.c b/frontend/menu/menu_common.c index bf00949d5c..b92277778c 100644 --- a/frontend/menu/menu_common.c +++ b/frontend/menu/menu_common.c @@ -69,7 +69,7 @@ static void menu_update_system_info(void *data, bool *load_no_rom) } //forward decl -static int menu_iterate_func(void *data, unsigned action); +static int menu_iterate_func(void *data, void *video_data, unsigned action); #ifdef HAVE_SHADER_MANAGER void shader_manager_init(void *data) @@ -259,7 +259,7 @@ void menu_rom_history_push_current(void) g_extern.system.info.library_name); } -void load_menu_game_prepare(void) +void load_menu_game_prepare(void *video_data) { if (*g_extern.fullpath || rgui->load_no_rom) { @@ -288,18 +288,18 @@ void load_menu_game_prepare(void) rgui->msg_force = true; if (menu_ctx) - menu_iterate_func(rgui, RGUI_ACTION_NOOP); + menu_iterate_func(rgui, video_data, RGUI_ACTION_NOOP); #endif // Draw frame for loading message if (driver.video_poke && driver.video_poke->set_texture_enable) - driver.video_poke->set_texture_enable(driver.video_data, rgui->frame_buf_show, MENU_TEXTURE_FULLSCREEN); + driver.video_poke->set_texture_enable(video_data, rgui->frame_buf_show, MENU_TEXTURE_FULLSCREEN); if (driver.video) rarch_render_cached_frame(); if (driver.video_poke && driver.video_poke->set_texture_enable) - driver.video_poke->set_texture_enable(driver.video_data, false, + driver.video_poke->set_texture_enable(video_data, false, MENU_TEXTURE_FULLSCREEN); } @@ -425,9 +425,9 @@ bool load_menu_game(void) } } -void menu_init(void) +void menu_init(void *video_data) { - if (!menu_ctx_init_first(&menu_ctx, ((void**)&rgui))) + if (!menu_ctx_init_first(&menu_ctx, ((void**)&rgui), video_data)) { RARCH_ERR("Could not initialize menu.\n"); rarch_fail(1, "menu_init()"); @@ -457,7 +457,7 @@ void menu_init(void) rgui->last_time = rarch_get_time_usec(); } -void menu_free(void) +void menu_free(void *video_data) { if (menu_ctx && menu_ctx->free) menu_ctx->free(rgui); @@ -561,19 +561,19 @@ uint64_t menu_input(void) // This only makes sense for PC so far. // Consoles use set_keybind callbacks instead. -static int menu_custom_bind_iterate(void *data, unsigned action) +static int menu_custom_bind_iterate(void *data, void *video_data, unsigned action) { rgui_handle_t *rgui = (rgui_handle_t*)data; (void)action; // Have to ignore action here. Only bind that should work here is Quit RetroArch or something like that. if (menu_ctx && menu_ctx->render) - menu_ctx->render(rgui); + menu_ctx->render(rgui, video_data); char msg[256]; snprintf(msg, sizeof(msg), "[%s]\npress joypad\n(RETURN to skip)", input_config_bind_map[rgui->binds.begin - RGUI_SETTINGS_BIND_BEGIN].desc); if (menu_ctx && menu_ctx->render_messagebox) - menu_ctx->render_messagebox(rgui, msg); + menu_ctx->render_messagebox(rgui, video_data, msg); struct rgui_bind_state binds = rgui->binds; menu_poll_bind_state(&binds); @@ -594,14 +594,14 @@ static int menu_custom_bind_iterate(void *data, unsigned action) return 0; } -static int menu_start_screen_iterate(void *data, unsigned action) +static int menu_start_screen_iterate(void *data, void *video_data, unsigned action) { unsigned i; char msg[1024]; rgui_handle_t *rgui = (rgui_handle_t*)data; if (menu_ctx && menu_ctx->render) - menu_ctx->render(rgui); + menu_ctx->render(rgui, video_data); char desc[6][64]; static const unsigned binds[] = { @@ -656,14 +656,14 @@ static int menu_start_screen_iterate(void *data, unsigned action) desc[0], desc[1], desc[2], desc[3], desc[4], desc[5]); if (menu_ctx && menu_ctx->render_messagebox) - menu_ctx->render_messagebox(rgui, msg); + menu_ctx->render_messagebox(rgui, video_data, msg); if (action == RGUI_ACTION_OK) file_list_pop(rgui->menu_stack, &rgui->selection_ptr); return 0; } -static int menu_viewport_iterate(void *data, unsigned action) +static int menu_viewport_iterate(void *data, void *video_data, unsigned action) { rgui_handle_t *rgui = (rgui_handle_t*)data; rarch_viewport_t *custom = &g_extern.console.screen.viewports.custom_vp; @@ -689,7 +689,7 @@ static int menu_viewport_iterate(void *data, unsigned action) custom->height -= stride_y; if (driver.video_poke && driver.video_poke->apply_state_changes) - driver.video_poke->apply_state_changes(driver.video_data); + driver.video_poke->apply_state_changes(video_data); break; case RGUI_ACTION_DOWN: @@ -703,7 +703,7 @@ static int menu_viewport_iterate(void *data, unsigned action) custom->height += stride_y; if (driver.video_poke && driver.video_poke->apply_state_changes) - driver.video_poke->apply_state_changes(driver.video_data); + driver.video_poke->apply_state_changes(video_data); break; case RGUI_ACTION_LEFT: @@ -716,7 +716,7 @@ static int menu_viewport_iterate(void *data, unsigned action) custom->width -= stride_x; if (driver.video_poke && driver.video_poke->apply_state_changes) - driver.video_poke->apply_state_changes(driver.video_data); + driver.video_poke->apply_state_changes(video_data); break; case RGUI_ACTION_RIGHT: @@ -730,7 +730,7 @@ static int menu_viewport_iterate(void *data, unsigned action) custom->width += stride_x; if (driver.video_poke && driver.video_poke->apply_state_changes) - driver.video_poke->apply_state_changes(driver.video_data); + driver.video_poke->apply_state_changes(video_data); break; case RGUI_ACTION_CANCEL: @@ -760,7 +760,7 @@ static int menu_viewport_iterate(void *data, unsigned action) rarch_viewport_t vp; if (driver.video && driver.video->viewport_info) - driver.video->viewport_info(driver.video_data, &vp); + driver.video->viewport_info(video_data, &vp); if (menu_type == RGUI_SETTINGS_CUSTOM_VIEWPORT) { @@ -776,7 +776,7 @@ static int menu_viewport_iterate(void *data, unsigned action) } if (driver.video_poke && driver.video_poke->apply_state_changes) - driver.video_poke->apply_state_changes(driver.video_data); + driver.video_poke->apply_state_changes(video_data); } break; @@ -791,7 +791,7 @@ static int menu_viewport_iterate(void *data, unsigned action) file_list_get_last(rgui->menu_stack, NULL, &menu_type); if (menu_ctx && menu_ctx->render) - menu_ctx->render(rgui); + menu_ctx->render(rgui, video_data); const char *base_msg = NULL; char msg[64]; @@ -822,7 +822,7 @@ static int menu_viewport_iterate(void *data, unsigned action) } if (menu_ctx && menu_ctx->render_messagebox) - menu_ctx->render_messagebox(rgui, msg); + menu_ctx->render_messagebox(rgui, video_data, msg); if (!custom->width) custom->width = stride_x; @@ -833,12 +833,12 @@ static int menu_viewport_iterate(void *data, unsigned action) (float)custom->width / custom->height; if (driver.video_poke && driver.video_poke->apply_state_changes) - driver.video_poke->apply_state_changes(driver.video_data); + driver.video_poke->apply_state_changes(video_data); return 0; } -static int menu_settings_iterate(void *data, unsigned action) +static int menu_settings_iterate(void *data, void *video_data, unsigned action) { rgui_handle_t *rgui = (rgui_handle_t*)data; rgui->frame_buf_pitch = rgui->width * 2; @@ -936,7 +936,7 @@ static int menu_settings_iterate(void *data, unsigned action) } else { - int ret = menu_settings_toggle_setting(rgui, type, action, menu_type); + int ret = menu_settings_toggle_setting(rgui, video_data, type, action, menu_type); if (ret) return ret; } @@ -988,7 +988,7 @@ static int menu_settings_iterate(void *data, unsigned action) } if (menu_ctx && menu_ctx->render) - menu_ctx->render(rgui); + menu_ctx->render(rgui, video_data); // Have to defer it so we let settings refresh. if (rgui->push_start_screen) @@ -1025,7 +1025,7 @@ void load_menu_game_new_core(void) #endif } -static int menu_iterate_func(void *data, unsigned action) +static int menu_iterate_func(void *data, void *video_data, unsigned action) { rgui_handle_t *rgui = (rgui_handle_t*)data; @@ -1035,7 +1035,7 @@ static int menu_iterate_func(void *data, unsigned action) int ret = 0; if (menu_ctx && menu_ctx->set_texture) - menu_ctx->set_texture(rgui, false); + menu_ctx->set_texture(rgui, video_data, false); #ifdef HAVE_OSK // process pending osk init callback @@ -1054,13 +1054,13 @@ static int menu_iterate_func(void *data, unsigned action) #endif if (menu_type == RGUI_START_SCREEN) - return menu_start_screen_iterate(rgui, action); + return menu_start_screen_iterate(rgui, video_data, action); else if (menu_type_is(menu_type) == RGUI_SETTINGS) - return menu_settings_iterate(rgui, action); + return menu_settings_iterate(rgui, video_data, action); else if (menu_type == RGUI_SETTINGS_CUSTOM_VIEWPORT || menu_type == RGUI_SETTINGS_CUSTOM_VIEWPORT_2) - return menu_viewport_iterate(rgui, action); + return menu_viewport_iterate(rgui, video_data, action); else if (menu_type == RGUI_SETTINGS_CUSTOM_BIND) - return menu_custom_bind_iterate(rgui, action); + return menu_custom_bind_iterate(rgui, video_data, action); if (rgui->need_refresh && action != RGUI_ACTION_MESSAGE) action = RGUI_ACTION_NOOP; @@ -1390,12 +1390,12 @@ static int menu_iterate_func(void *data, unsigned action) menu_ctx->iterate(rgui, action); if (menu_ctx && menu_ctx->render) - menu_ctx->render(rgui); + menu_ctx->render(rgui, video_data); return ret; } -bool menu_iterate(void) +bool menu_iterate(void *video_data) { retro_time_t time, delta, target_msec, sleep_msec; unsigned action; @@ -1483,10 +1483,10 @@ bool menu_iterate(void) action = RGUI_ACTION_START; if (menu_ctx) - input_entry_ret = menu_iterate_func(rgui, action); + input_entry_ret = menu_iterate_func(rgui, video_data, action); if (driver.video_poke && driver.video_poke->set_texture_enable) - driver.video_poke->set_texture_enable(driver.video_data, rgui->frame_buf_show, MENU_TEXTURE_FULLSCREEN); + driver.video_poke->set_texture_enable(video_data, rgui->frame_buf_show, MENU_TEXTURE_FULLSCREEN); rarch_render_cached_frame(); @@ -1500,7 +1500,7 @@ bool menu_iterate(void) rgui->last_time = rarch_get_time_usec(); if (driver.video_poke && driver.video_poke->set_texture_enable) - driver.video_poke->set_texture_enable(driver.video_data, false, + driver.video_poke->set_texture_enable(video_data, false, MENU_TEXTURE_FULLSCREEN); if (menu_ctx && menu_ctx->input_postprocess) diff --git a/frontend/menu/menu_common.h b/frontend/menu/menu_common.h index b1a4c7e804..61a254f202 100644 --- a/frontend/menu/menu_common.h +++ b/frontend/menu/menu_common.h @@ -405,9 +405,9 @@ typedef struct extern rgui_handle_t *rgui; -void menu_init(void); -bool menu_iterate(void); -void menu_free(void); +void menu_init(void *data); +bool menu_iterate(void *data); +void menu_free(void *data); #ifdef HAVE_SHADER_MANAGER void shader_manager_init(void *data); @@ -424,7 +424,7 @@ void menu_parse_and_resolve(void *data, unsigned menu_type); void menu_init_core_info(void *data); -void load_menu_game_prepare(void); +void load_menu_game_prepare(void *video_data); void load_menu_game_prepare_dummy(void); bool load_menu_game(void); void load_menu_game_history(unsigned game_index); @@ -437,8 +437,8 @@ bool menu_replace_config(const char *path); bool menu_save_new_config(void); -int menu_settings_toggle_setting(void *data, unsigned setting, unsigned action, unsigned menu_type); -int menu_set_settings(void *data, unsigned setting, unsigned action); +int menu_settings_toggle_setting(void *data, void *video_data, unsigned setting, unsigned action, unsigned menu_type); +int menu_set_settings(void *data, void *video_data, unsigned setting, unsigned action); void menu_set_settings_label(char *type_str, size_t type_str_size, unsigned *w, unsigned type); void menu_populate_entries(void *data, unsigned menu_type); diff --git a/frontend/menu/menu_context.c b/frontend/menu/menu_context.c index e721af0944..925f1b28bb 100644 --- a/frontend/menu/menu_context.c +++ b/frontend/menu/menu_context.c @@ -83,7 +83,7 @@ void find_next_menu_driver(void) RARCH_WARN("Couldn't find any next menu driver (current one: \"%s\").\n", g_settings.menu.driver); } -bool menu_ctx_init_first(const menu_ctx_driver_t **driver, void **data) +bool menu_ctx_init_first(const menu_ctx_driver_t **driver, void **data, void *video_data) { unsigned i; rgui_handle_t **handle = (rgui_handle_t**)data; @@ -93,7 +93,7 @@ bool menu_ctx_init_first(const menu_ctx_driver_t **driver, void **data) for (i = 0; menu_ctx_drivers[i]; i++) { - void *h = menu_ctx_drivers[i]->init(); + void *h = menu_ctx_drivers[i]->init(video_data); if (h) { *driver = menu_ctx_drivers[i]; diff --git a/frontend/menu/menu_context.h b/frontend/menu/menu_context.h index da634f07d7..9df7d9aa7e 100644 --- a/frontend/menu/menu_context.h +++ b/frontend/menu/menu_context.h @@ -26,12 +26,12 @@ typedef struct menu_ctx_driver { - void (*set_texture)(void*, bool); - void (*render_messagebox)(void*, const char*); - void (*render)(void*); - void* (*init)(void); + void (*set_texture)(void*, void*, bool); + void (*render_messagebox)(void*, void*, const char*); + void (*render)(void*, void*); + void* (*init)(void*); void (*free)(void*); - void (*init_assets)(void*); + void (*init_assets)(void*, void*); void (*free_assets)(void*); void (*populate_entries)(void*, unsigned); void (*iterate)(void*, unsigned); @@ -47,7 +47,7 @@ extern const menu_ctx_driver_t menu_ctx_rgui; extern const menu_ctx_driver_t menu_ctx_lakka; const menu_ctx_driver_t *menu_ctx_find_driver(const char *ident); // Finds driver with ident. Does not initialize. -bool menu_ctx_init_first(const menu_ctx_driver_t **driver, void **handle); // Finds first suitable driver and initializes. +bool menu_ctx_init_first(const menu_ctx_driver_t **driver, void **handle, void *video_data); // Finds first suitable driver and initializes. void find_prev_menu_driver(void); void find_next_menu_driver(void); diff --git a/frontend/menu/menu_settings.c b/frontend/menu/menu_settings.c index 32da22570b..cac77c944c 100644 --- a/frontend/menu/menu_settings.c +++ b/frontend/menu/menu_settings.c @@ -240,7 +240,7 @@ void shader_manager_save_preset(void *data, const char *basename, bool apply) RARCH_ERR("Failed to save shader preset. Make sure config directory and/or shader dir are writable.\n"); } -static int shader_manager_toggle_setting(void *data, unsigned setting, unsigned action) +static int shader_manager_toggle_setting(void *data, void *video_data, unsigned setting, unsigned action) { unsigned dist_shader, dist_filter, dist_scale; rgui_handle_t *rgui = (rgui_handle_t*)data; @@ -267,7 +267,7 @@ static int shader_manager_toggle_setting(void *data, unsigned setting, unsigned } } else if (setting == RGUI_SETTINGS_SHADER_APPLY || setting == RGUI_SETTINGS_SHADER_PASSES) - return menu_set_settings(rgui, setting, action); + return menu_set_settings(rgui, video_data, setting, action); else if ((dist_shader % 3) == 0 || setting == RGUI_SETTINGS_SHADER_PRESET) { dist_shader /= 3; @@ -370,17 +370,17 @@ static int menu_core_setting_toggle(unsigned setting, unsigned action) return 0; } -int menu_settings_toggle_setting(void *data, unsigned setting, unsigned action, unsigned menu_type) +int menu_settings_toggle_setting(void *data, void *video_data, unsigned setting, unsigned action, unsigned menu_type) { rgui_handle_t *rgui = (rgui_handle_t*)data; #ifdef HAVE_SHADER_MANAGER if (setting >= RGUI_SETTINGS_SHADER_FILTER && setting <= RGUI_SETTINGS_SHADER_LAST) - return shader_manager_toggle_setting(rgui, setting, action); + return shader_manager_toggle_setting(rgui, video_data, setting, action); #endif if (setting >= RGUI_SETTINGS_CORE_OPTION_START) return menu_core_setting_toggle(setting, action); - return menu_set_settings(rgui, setting, action); + return menu_set_settings(rgui, video_data, setting, action); } #ifdef HAVE_OSK @@ -478,7 +478,7 @@ static bool osk_callback_enter_filename_init(void *data) #define RARCH_DEFAULT_PORT 55435 #endif -int menu_set_settings(void *data, unsigned setting, unsigned action) +int menu_set_settings(void *data, void *video_data, unsigned setting, unsigned action) { rgui_handle_t *rgui = (rgui_handle_t*)data; unsigned port = rgui->current_pad; @@ -1172,7 +1172,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) g_settings.video.smooth = !g_settings.video.smooth; if (driver.video_poke && driver.video_poke->set_filtering) - driver.video_poke->set_filtering(driver.video_data, 1, g_settings.video.smooth); + driver.video_poke->set_filtering(video_data, 1, g_settings.video.smooth); break; case RGUI_SETTINGS_DRIVER_VIDEO: @@ -1244,7 +1244,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) { g_extern.console.screen.gamma_correction = 0; if (driver.video_poke && driver.video_poke->apply_state_changes) - driver.video_poke->apply_state_changes(driver.video_data); + driver.video_poke->apply_state_changes(video_data); } else if (action == RGUI_ACTION_LEFT) { @@ -1252,7 +1252,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) { g_extern.console.screen.gamma_correction--; if (driver.video_poke && driver.video_poke->apply_state_changes) - driver.video_poke->apply_state_changes(driver.video_data); + driver.video_poke->apply_state_changes(video_data); } } else if (action == RGUI_ACTION_RIGHT) @@ -1261,7 +1261,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) { g_extern.console.screen.gamma_correction++; if (driver.video_poke && driver.video_poke->apply_state_changes) - driver.video_poke->apply_state_changes(driver.video_data); + driver.video_poke->apply_state_changes(video_data); } } break; @@ -1275,7 +1275,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) g_settings.video.scale_integer = !g_settings.video.scale_integer; if (driver.video_poke && driver.video_poke->apply_state_changes) - driver.video_poke->apply_state_changes(driver.video_data); + driver.video_poke->apply_state_changes(video_data); break; case RGUI_SETTINGS_VIDEO_ASPECT_RATIO: @@ -1293,7 +1293,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) } if (driver.video_poke && driver.video_poke->set_aspect_ratio) - driver.video_poke->set_aspect_ratio(driver.video_data, g_settings.video.aspect_ratio_idx); + driver.video_poke->set_aspect_ratio(video_data, g_settings.video.aspect_ratio_idx); break; case RGUI_SETTINGS_TOGGLE_FULLSCREEN: @@ -1308,7 +1308,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) if(rgui_current_gx_resolution > 0) { rgui_current_gx_resolution--; - gx_set_video_mode(driver.video_data, rgui_gx_resolutions[rgui_current_gx_resolution][0], rgui_gx_resolutions[rgui_current_gx_resolution][1]); + gx_set_video_mode(video_data, rgui_gx_resolutions[rgui_current_gx_resolution][0], rgui_gx_resolutions[rgui_current_gx_resolution][1]); } } else if (action == RGUI_ACTION_RIGHT) @@ -1322,7 +1322,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) #endif rgui_current_gx_resolution++; - gx_set_video_mode(driver.video_data, rgui_gx_resolutions[rgui_current_gx_resolution][0], + gx_set_video_mode(video_data, rgui_gx_resolutions[rgui_current_gx_resolution][0], rgui_gx_resolutions[rgui_current_gx_resolution][1]); } } @@ -1366,7 +1366,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) if (menu_ctx && menu_ctx->free_assets) menu_ctx->free_assets(rgui); if (menu_ctx && menu_ctx->init_assets) - menu_ctx->init_assets(rgui); + menu_ctx->init_assets(rgui, video_data); } break; case RGUI_SETTINGS_VIDEO_PAL60: @@ -1387,7 +1387,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) if (menu_ctx && menu_ctx->free_assets) menu_ctx->free_assets(rgui); if (menu_ctx && menu_ctx->init_assets) - menu_ctx->init_assets(rgui); + menu_ctx->init_assets(rgui, video_data); } break; case RGUI_ACTION_START: @@ -1400,7 +1400,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) if (menu_ctx && menu_ctx->free_assets) menu_ctx->free_assets(rgui); if (menu_ctx && menu_ctx->init_assets) - menu_ctx->init_assets(rgui); + menu_ctx->init_assets(rgui, video_data); } break; } @@ -1414,7 +1414,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) g_extern.lifecycle_state |= (1ULL << MODE_VIDEO_SOFT_FILTER_ENABLE); if (driver.video_poke && driver.video_poke->apply_state_changes) - driver.video_poke->apply_state_changes(driver.video_data); + driver.video_poke->apply_state_changes(video_data); break; #endif @@ -1564,7 +1564,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) g_settings.video.swap_interval = min(g_settings.video.swap_interval, 4); g_settings.video.swap_interval = max(g_settings.video.swap_interval, 1); - if (old != g_settings.video.swap_interval && driver.video && driver.video_data) + if (old != g_settings.video.swap_interval && driver.video && video_data) video_set_nonblock_state_func(false); // This will update the current swap interval. Since we're in RGUI now, always apply VSync. break;