diff --git a/gfx/video_driver.c b/gfx/video_driver.c index a148d4ed3e..55eafa3102 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -1537,6 +1537,13 @@ bool video_driver_supports_viewport_read(void) return current_video->read_viewport && current_video->viewport_info; } +bool video_driver_prefer_viewport_read(void) +{ + settings_t *settings = config_get_ptr(); + return settings->bools.video_gpu_screenshot || + (video_driver_is_hw_context() && !current_video->read_frame_raw); +} + bool video_driver_supports_read_frame_raw(void) { if (current_video->read_frame_raw) diff --git a/gfx/video_driver.h b/gfx/video_driver.h index 927d8946ad..8115b64e25 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -829,6 +829,7 @@ void video_driver_unset_stub_frame(void); bool video_driver_is_stub_frame(void); bool video_driver_supports_recording(void); bool video_driver_supports_viewport_read(void); +bool video_driver_prefer_viewport_read(void); bool video_driver_supports_read_frame_raw(void); void video_driver_set_viewport_config(void); void video_driver_set_viewport_square_pixel(void); diff --git a/tasks/task_screenshot.c b/tasks/task_screenshot.c index 406bdc389d..dbfed75a02 100644 --- a/tasks/task_screenshot.c +++ b/tasks/task_screenshot.c @@ -516,8 +516,8 @@ bool take_screenshot( screenshot_dir, name_base, silence, is_paused, is_idle, has_valid_framebuffer, fullpath, use_thread, - video_driver_supports_viewport_read() - && settings->bools.video_gpu_screenshot, + video_driver_supports_viewport_read() && + video_driver_prefer_viewport_read(), video_driver_supports_read_frame_raw(), video_driver_get_pixel_format() );