(Menu) Pass video_data pointer to menu functions

This commit is contained in:
twinaphex 2014-03-07 06:28:28 +01:00
parent 82c7e8f422
commit 36716706c2
10 changed files with 116 additions and 115 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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)

View File

@ -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);

View File

@ -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];

View File

@ -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);

View File

@ -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;