citra_qt, video_core: Screenshot functionality
Allows capturing screenshot at the current internal resolution (native for software renderer), but a setting is available to capture it in other resolutions. The screenshot is saved to a single PNG in the current layout.
This commit is contained in:
@ -4,6 +4,7 @@
|
||||
|
||||
#include <memory>
|
||||
#include "common/logging/log.h"
|
||||
#include "core/settings.h"
|
||||
#include "video_core/pica.h"
|
||||
#include "video_core/renderer_base.h"
|
||||
#include "video_core/renderer_opengl/renderer_opengl.h"
|
||||
@ -22,6 +23,11 @@ std::atomic<bool> g_hw_shader_enabled;
|
||||
std::atomic<bool> g_hw_shader_accurate_gs;
|
||||
std::atomic<bool> g_hw_shader_accurate_mul;
|
||||
std::atomic<bool> g_renderer_bg_color_update_requested;
|
||||
// Screenshot
|
||||
std::atomic<bool> g_renderer_screenshot_requested;
|
||||
void* g_screenshot_bits;
|
||||
std::function<void()> g_screenshot_complete_callback;
|
||||
Layout::FramebufferLayout g_screenshot_framebuffer_layout;
|
||||
|
||||
/// Initialize the video core
|
||||
Core::System::ResultStatus Init(EmuWindow& emu_window) {
|
||||
@ -48,4 +54,27 @@ void Shutdown() {
|
||||
LOG_DEBUG(Render, "shutdown OK");
|
||||
}
|
||||
|
||||
void RequestScreenshot(void* data, std::function<void()> callback,
|
||||
const Layout::FramebufferLayout& layout) {
|
||||
if (g_renderer_screenshot_requested) {
|
||||
LOG_ERROR(Render, "A screenshot is already requested or in progress, ignoring the request");
|
||||
return;
|
||||
}
|
||||
g_screenshot_bits = data;
|
||||
g_screenshot_complete_callback = std::move(callback);
|
||||
g_screenshot_framebuffer_layout = layout;
|
||||
g_renderer_screenshot_requested = true;
|
||||
}
|
||||
|
||||
u16 GetResolutionScaleFactor() {
|
||||
if (g_hw_renderer_enabled) {
|
||||
return !Settings::values.resolution_factor
|
||||
? g_renderer->GetRenderWindow().GetFramebufferLayout().GetScalingRatio()
|
||||
: Settings::values.resolution_factor;
|
||||
} else {
|
||||
// Software renderer always render at native resolution
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace VideoCore
|
||||
|
Reference in New Issue
Block a user