From caf87b1198acc6f78507ac3f8d8e3faa55fae2d4 Mon Sep 17 00:00:00 2001 From: Themaister Date: Tue, 29 Mar 2011 18:28:31 +0200 Subject: [PATCH] Font handling and stuff. --- config.def.h | 2 ++ gfx/gl.c | 8 ++++++++ ssnes.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) diff --git a/config.def.h b/config.def.h index 332baffebc..6ed3417fa4 100644 --- a/config.def.h +++ b/config.def.h @@ -221,6 +221,8 @@ static const struct snes_keybind snes_keybinds_1[] = { { SSNES_MOVIE_RECORD_TOGGLE, SDLK_o, NO_BTN, AXIS_NONE }, { SSNES_PAUSE_TOGGLE, SDLK_p, NO_BTN, AXIS_NONE }, { SSNES_RESET, SDLK_h, NO_BTN, AXIS_NONE }, + { SSNES_SHADER_NEXT, SDLK_m, NO_BTN, AXIS_NONE }, + { SSNES_SHADER_PREV, SDLK_n, NO_BTN, AXIS_NONE }, { -1 } }; diff --git a/gfx/gl.c b/gfx/gl.c index b621807376..c303b7ec17 100644 --- a/gfx/gl.c +++ b/gfx/gl.c @@ -1049,6 +1049,13 @@ static bool gl_focus(void *data) return (SDL_GetAppState() & (SDL_APPINPUTFOCUS | SDL_APPACTIVE)) == (SDL_APPINPUTFOCUS | SDL_APPACTIVE); } +static bool gl_xml_shader(void *data, const char *path) +{ + (void)data; + (void)path; + return true; +} + const video_driver_t video_gl = { .init = gl_init, .frame = gl_frame, @@ -1056,6 +1063,7 @@ const video_driver_t video_gl = { .set_nonblock_state = gl_set_nonblock_state, .focus = gl_focus, .free = gl_free, + .xml_shader = gl_xml_shader, .ident = "gl" }; diff --git a/ssnes.c b/ssnes.c index 09c7223dcc..a05202573b 100644 --- a/ssnes.c +++ b/ssnes.c @@ -1158,6 +1158,51 @@ static void check_reset(void) } } +#ifdef HAVE_XML +static void check_shader_dir(void) +{ + static bool old_pressed_next = false; + static bool old_pressed_prev = true; + + if (!g_extern.shader_dir.elems || !driver.video->xml_shader) + return; + + bool should_apply = false; + bool pressed_next = driver.input->key_pressed(driver.input_data, SSNES_SHADER_NEXT); + bool pressed_prev = driver.input->key_pressed(driver.input_data, SSNES_SHADER_PREV); + if (pressed_next && !old_pressed_next) + { + should_apply = true; + g_extern.shader_dir.ptr = (g_extern.shader_dir.ptr + 1) % g_extern.shader_dir.size; + } + else if (pressed_prev && !old_pressed_prev) + { + should_apply = true; + if (g_extern.shader_dir.ptr == 0) + g_extern.shader_dir.ptr = g_extern.shader_dir.size - 1; + else + g_extern.shader_dir.ptr--; + } + + if (should_apply) + { + const char *shader = g_extern.shader_dir.elems[g_extern.shader_dir.ptr]; + msg_queue_clear(g_extern.msg_queue); + char msg[512]; + snprintf(msg, sizeof(msg), "XML shader #%u: \"%s\"", (unsigned)g_extern.shader_dir.ptr, shader); + msg_queue_push(g_extern.msg_queue, msg, 1, 120); + SSNES_LOG("Applying shader \"%s\"\n", shader); + + if (!driver.video->xml_shader(driver.video_data, shader)) + SSNES_WARN("Failed to apply shader!\n"); + } + + old_pressed_next = pressed_next; + old_pressed_prev = pressed_prev; + +} +#endif + static void do_state_checks(void) { if (!g_extern.netplay) @@ -1178,6 +1223,10 @@ static void do_state_checks(void) if (!g_extern.bsv_movie_playback) check_movie_record(); + +#ifdef HAVE_XML + check_shader_dir(); +#endif } check_fullscreen();