mirror of
https://github.com/libretro/RetroArch
synced 2025-04-01 13:20:43 +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
|
#ifdef HAVE_SCREENSHOTS
|
||||||
case RGUI_SETTINGS_SCREENSHOT:
|
case RGUI_SETTINGS_SCREENSHOT:
|
||||||
if (action == RGUI_ACTION_OK)
|
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();
|
rarch_take_screenshot();
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case RGUI_SETTINGS_RESTART_GAME:
|
case RGUI_SETTINGS_RESTART_GAME:
|
||||||
|
24
retroarch.c
24
retroarch.c
@ -122,10 +122,24 @@ void rarch_take_screenshot(void)
|
|||||||
|
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
|
||||||
if ((g_settings.video.gpu_screenshot ||
|
bool viewport_read = (g_settings.video.gpu_screenshot ||
|
||||||
g_extern.system.hw_render_callback.context_type != RETRO_HW_CONTEXT_NONE) &&
|
g_extern.system.hw_render_callback.context_type != RETRO_HW_CONTEXT_NONE) &&
|
||||||
driver.video->read_viewport &&
|
driver.video->read_viewport &&
|
||||||
driver.video->viewport_info)
|
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();
|
ret = take_screenshot_viewport();
|
||||||
else if (g_extern.frame_cache.data && (g_extern.frame_cache.data != RETRO_HW_FRAME_BUFFER_VALID))
|
else if (g_extern.frame_cache.data && (g_extern.frame_cache.data != RETRO_HW_FRAME_BUFFER_VALID))
|
||||||
ret = take_screenshot_raw();
|
ret = take_screenshot_raw();
|
||||||
@ -144,8 +158,6 @@ void rarch_take_screenshot(void)
|
|||||||
msg = "Failed to take screenshot.";
|
msg = "Failed to take screenshot.";
|
||||||
}
|
}
|
||||||
|
|
||||||
msg_queue_clear(g_extern.msg_queue);
|
|
||||||
|
|
||||||
if (g_extern.is_paused)
|
if (g_extern.is_paused)
|
||||||
{
|
{
|
||||||
msg_queue_push(g_extern.msg_queue, msg, 1, 1);
|
msg_queue_push(g_extern.msg_queue, msg, 1, 1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user