Avoid OSD fonts appearing on screenshots.

Clears message queue and renders a cached frame
before taking screenshot when taking GPU screenshots.
This commit is contained in:
Themaister 2013-09-16 22:27:15 +02:00
parent 0c9cb3e610
commit bbbe058cad
2 changed files with 18 additions and 17 deletions

View File

@ -1003,18 +1003,7 @@ static int rgui_settings_toggle_setting(rgui_handle_t *rgui, unsigned setting, r
#ifdef HAVE_SCREENSHOTS
case RGUI_SETTINGS_SCREENSHOT:
if (action == RGUI_ACTION_OK)
{
// Render a clean frame to avoid taking screnshot of RGUI.
if (g_settings.video.gpu_screenshot ||
g_extern.system.hw_render_callback.context_type != RETRO_HW_CONTEXT_NONE)
{
if (driver.video_poke && driver.video_poke->set_texture_enable)
driver.video_poke->set_texture_enable(driver.video_data, false, false);
if (driver.video)
rarch_render_cached_frame();
}
rarch_take_screenshot();
}
break;
#endif
case RGUI_SETTINGS_RESTART_GAME:

View File

@ -122,10 +122,24 @@ void rarch_take_screenshot(void)
bool ret = false;
if ((g_settings.video.gpu_screenshot ||
g_extern.system.hw_render_callback.context_type != RETRO_HW_CONTEXT_NONE) &&
driver.video->read_viewport &&
driver.video->viewport_info)
bool viewport_read = (g_settings.video.gpu_screenshot ||
g_extern.system.hw_render_callback.context_type != RETRO_HW_CONTEXT_NONE) &&
driver.video->read_viewport &&
driver.video->viewport_info;
// Clear out message queue to avoid OSD fonts to appear on screenshot.
msg_queue_clear(g_extern.msg_queue);
if (viewport_read)
{
// Avoid taking screenshot of GUI overlays.
if (driver.video_poke && driver.video_poke->set_texture_enable)
driver.video_poke->set_texture_enable(driver.video_data, false, false);
if (driver.video)
rarch_render_cached_frame();
}
if (viewport_read)
ret = take_screenshot_viewport();
else if (g_extern.frame_cache.data && (g_extern.frame_cache.data != RETRO_HW_FRAME_BUFFER_VALID))
ret = take_screenshot_raw();
@ -144,8 +158,6 @@ void rarch_take_screenshot(void)
msg = "Failed to take screenshot.";
}
msg_queue_clear(g_extern.msg_queue);
if (g_extern.is_paused)
{
msg_queue_push(g_extern.msg_queue, msg, 1, 1);