mirror of
https://github.com/libretro/RetroArch.git
synced 2025-02-15 06:58:34 +00:00
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:
parent
0c9cb3e610
commit
bbbe058cad
@ -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:
|
||||
|
24
retroarch.c
24
retroarch.c
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user