forked from ShuriZma/suyu
1
0
Fork 0

bootmanager: Fix screenshot resolution factor usage

Fixes screenshots at non integer scaling
This commit is contained in:
ameerj 2021-09-10 01:28:02 -04:00 committed by Fernando Sahmkow
parent fcf2b2c78a
commit 80f8d4989e
7 changed files with 13 additions and 20 deletions

View File

@ -44,16 +44,13 @@ FramebufferLayout DefaultFrameLayout(u32 width, u32 height) {
return res; return res;
} }
FramebufferLayout FrameLayoutFromResolutionScale(u32 res_scale) { FramebufferLayout FrameLayoutFromResolutionScale(f32 res_scale) {
u32 width, height; const bool is_docked = Settings::values.use_docked_mode.GetValue();
const u32 screen_width = is_docked ? ScreenDocked::Width : ScreenUndocked::Width;
const u32 screen_height = is_docked ? ScreenDocked::Height : ScreenUndocked::Height;
if (Settings::values.use_docked_mode.GetValue()) { const u32 width = static_cast<u32>(static_cast<f32>(screen_width) * res_scale);
width = ScreenDocked::Width * res_scale; const u32 height = static_cast<u32>(static_cast<f32>(screen_height) * res_scale);
height = ScreenDocked::Height * res_scale;
} else {
width = ScreenUndocked::Width * res_scale;
height = ScreenUndocked::Height * res_scale;
}
return DefaultFrameLayout(width, height); return DefaultFrameLayout(width, height);
} }

View File

@ -60,7 +60,7 @@ FramebufferLayout DefaultFrameLayout(u32 width, u32 height);
* Convenience method to get frame layout by resolution scale * Convenience method to get frame layout by resolution scale
* @param res_scale resolution scale factor * @param res_scale resolution scale factor
*/ */
FramebufferLayout FrameLayoutFromResolutionScale(u32 res_scale); FramebufferLayout FrameLayoutFromResolutionScale(f32 res_scale);
/** /**
* Convenience method to determine emulation aspect ratio * Convenience method to determine emulation aspect ratio

View File

@ -628,11 +628,9 @@ void GRenderWindow::ReleaseRenderTarget() {
main_context.reset(); main_context.reset();
} }
void GRenderWindow::CaptureScreenshot(u32 res_scale, const QString& screenshot_path) { void GRenderWindow::CaptureScreenshot(const QString& screenshot_path) {
VideoCore::RendererBase& renderer = system.Renderer(); auto& renderer = system.Renderer();
if (res_scale == 0) { const f32 res_scale = VideoCore::GetResolutionScaleFactor(renderer);
res_scale = VideoCore::GetResolutionScaleFactor(renderer);
}
const Layout::FramebufferLayout layout{Layout::FrameLayoutFromResolutionScale(res_scale)}; const Layout::FramebufferLayout layout{Layout::FrameLayoutFromResolutionScale(res_scale)};
screenshot_image = QImage(QSize(layout.width, layout.height), QImage::Format_RGB32); screenshot_image = QImage(QSize(layout.width, layout.height), QImage::Format_RGB32);

View File

@ -178,7 +178,7 @@ public:
bool IsLoadingComplete() const; bool IsLoadingComplete() const;
void CaptureScreenshot(u32 res_scale, const QString& screenshot_path); void CaptureScreenshot(const QString& screenshot_path);
std::pair<u32, u32> ScaleTouch(const QPointF& pos) const; std::pair<u32, u32> ScaleTouch(const QPointF& pos) const;

View File

@ -163,7 +163,7 @@ void MicroProfileWidget::mouseReleaseEvent(QMouseEvent* ev) {
} }
void MicroProfileWidget::wheelEvent(QWheelEvent* ev) { void MicroProfileWidget::wheelEvent(QWheelEvent* ev) {
const auto wheel_position = ev->position().toPoint(); const auto wheel_position = ev->pos();
MicroProfileMousePosition(wheel_position.x() / x_scale, wheel_position.y() / y_scale, MicroProfileMousePosition(wheel_position.x() / x_scale, wheel_position.y() / y_scale,
ev->angleDelta().y() / 120); ev->angleDelta().y() / 120);
ev->accept(); ev->accept();

View File

@ -2892,8 +2892,7 @@ void GMainWindow::OnCaptureScreenshot() {
} }
} }
#endif #endif
render_window->CaptureScreenshot(UISettings::values.screenshot_resolution_factor.GetValue(), render_window->CaptureScreenshot(filename);
filename);
} }
// TODO: Written 2020-10-01: Remove per-game config migration code when it is irrelevant // TODO: Written 2020-10-01: Remove per-game config migration code when it is irrelevant

View File

@ -68,7 +68,6 @@ struct Values {
Settings::BasicSetting<bool> enable_discord_presence{true, "enable_discord_presence"}; Settings::BasicSetting<bool> enable_discord_presence{true, "enable_discord_presence"};
Settings::BasicSetting<bool> enable_screenshot_save_as{true, "enable_screenshot_save_as"}; Settings::BasicSetting<bool> enable_screenshot_save_as{true, "enable_screenshot_save_as"};
Settings::BasicSetting<u16> screenshot_resolution_factor{0, "screenshot_resolution_factor"};
QString roms_path; QString roms_path;
QString symbols_path; QString symbols_path;