diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.cpp b/game/graphics/opengl_renderer/OpenGLRenderer.cpp index f435f8c2bb..70881c1a46 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.cpp +++ b/game/graphics/opengl_renderer/OpenGLRenderer.cpp @@ -782,7 +782,7 @@ void OpenGLRenderer::setup_frame(const RenderOptions& settings) { window_fb.multisampled = false; // see if the render FBO is still applicable - if (!m_fbo_state.render_fbo || window_resized || + if (settings.save_screenshot || window_resized || !m_fbo_state.render_fbo || !m_fbo_state.render_fbo->matches(settings.game_res_w, settings.game_res_h, settings.msaa_samples)) { // doesn't match, set up a new one for these settings @@ -794,7 +794,10 @@ void OpenGLRenderer::setup_frame(const RenderOptions& settings) { m_fbo_state.resources.resolve_buffer.clear(); // first, see if we can just render straight to the display framebuffer. - if (window_fb.matches(settings.game_res_w, settings.game_res_h, settings.msaa_samples)) { + // note: we always force a separate fbo on a screenshot so that it won't capture overlays. + // as an added bonus it also doesn't break the sprite distort buffer... + if (!settings.save_screenshot && + window_fb.matches(settings.game_res_w, settings.game_res_h, settings.msaa_samples)) { // it matches - no need for extra framebuffers. lg::info("FBO Setup: rendering directly to window framebuffer"); m_fbo_state.render_fbo = &m_fbo_state.resources.window; diff --git a/game/graphics/pipelines/opengl.cpp b/game/graphics/pipelines/opengl.cpp index ef435b56dc..5bd2aa192f 100644 --- a/game/graphics/pipelines/opengl.cpp +++ b/game/graphics/pipelines/opengl.cpp @@ -481,10 +481,7 @@ void render_game_frame(int game_width, options.draw_region_height = window_fb_height; } - want_hotkey_screenshot = - want_hotkey_screenshot && g_gfx_data->debug_gui.screenshot_hotkey_enabled; - if (want_hotkey_screenshot) { - want_hotkey_screenshot = false; + if (want_hotkey_screenshot && g_gfx_data->debug_gui.screenshot_hotkey_enabled) { options.save_screenshot = true; std::string screenshot_file_name = make_hotkey_screenshot_file_name(); options.screenshot_path = make_full_screenshot_output_file_path(screenshot_file_name); @@ -502,6 +499,7 @@ void render_game_frame(int game_width, } options.screenshot_path = make_full_screenshot_output_file_path(screenshot_file_name); } + want_hotkey_screenshot = false; options.draw_small_profiler_window = g_gfx_data->debug_gui.small_profiler; options.pmode_alp_register = g_gfx_data->pmode_alp;