Просмотр исходного кода

bootmanager: Fix screenshot resolution factor usage

Fixes screenshots at non integer scaling
ameerj 4 лет назад
Родитель
Сommit
80f8d4989e

+ 6 - 9
src/core/frontend/framebuffer_layout.cpp

@@ -44,16 +44,13 @@ FramebufferLayout DefaultFrameLayout(u32 width, u32 height) {
     return res;
 }
 
-FramebufferLayout FrameLayoutFromResolutionScale(u32 res_scale) {
-    u32 width, height;
+FramebufferLayout FrameLayoutFromResolutionScale(f32 res_scale) {
+    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()) {
-        width = ScreenDocked::Width * res_scale;
-        height = ScreenDocked::Height * res_scale;
-    } else {
-        width = ScreenUndocked::Width * res_scale;
-        height = ScreenUndocked::Height * res_scale;
-    }
+    const u32 width = static_cast<u32>(static_cast<f32>(screen_width) * res_scale);
+    const u32 height = static_cast<u32>(static_cast<f32>(screen_height) * res_scale);
 
     return DefaultFrameLayout(width, height);
 }

+ 1 - 1
src/core/frontend/framebuffer_layout.h

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

+ 3 - 5
src/yuzu/bootmanager.cpp

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

+ 1 - 1
src/yuzu/bootmanager.h

@@ -178,7 +178,7 @@ public:
 
     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;
 

+ 1 - 1
src/yuzu/debugger/profiler.cpp

@@ -163,7 +163,7 @@ void MicroProfileWidget::mouseReleaseEvent(QMouseEvent* 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,
                               ev->angleDelta().y() / 120);
     ev->accept();

+ 1 - 2
src/yuzu/main.cpp

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

+ 0 - 1
src/yuzu/uisettings.h

@@ -68,7 +68,6 @@ struct Values {
     Settings::BasicSetting<bool> enable_discord_presence{true, "enable_discord_presence"};
 
     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 symbols_path;