瀏覽代碼

bootmanager: Don't create another screenshot request if previous one is not done yet

german77 4 年之前
父節點
當前提交
3e77466b86
共有 3 個文件被更改,包括 13 次插入0 次删除
  1. 4 0
      src/video_core/renderer_base.cpp
  2. 3 0
      src/video_core/renderer_base.h
  3. 6 0
      src/yuzu/bootmanager.cpp

+ 4 - 0
src/video_core/renderer_base.cpp

@@ -26,6 +26,10 @@ void RendererBase::UpdateCurrentFramebufferLayout() {
     render_window.UpdateCurrentFramebufferLayout(layout.width, layout.height);
 }
 
+bool RendererBase::IsScreenshotPending() const {
+    return renderer_settings.screenshot_requested;
+}
+
 void RendererBase::RequestScreenshot(void* data, std::function<void(bool)> callback,
                                      const Layout::FramebufferLayout& layout) {
     if (renderer_settings.screenshot_requested) {

+ 3 - 0
src/video_core/renderer_base.h

@@ -83,6 +83,9 @@ public:
     /// Refreshes the settings common to all renderers
     void RefreshBaseSettings();
 
+    /// Returns true if a screenshot is being processed
+    bool IsScreenshotPending() const;
+
     /// Request a screenshot of the next frame
     void RequestScreenshot(void* data, std::function<void(bool)> callback,
                            const Layout::FramebufferLayout& layout);

+ 6 - 0
src/yuzu/bootmanager.cpp

@@ -933,6 +933,12 @@ void GRenderWindow::CaptureScreenshot(const QString& screenshot_path) {
     auto& renderer = system.Renderer();
     const f32 res_scale = Settings::values.resolution_info.up_factor;
 
+    if (renderer.IsScreenshotPending()) {
+        LOG_WARNING(Render,
+                    "A screenshot is already requested or in progress, ignoring the request");
+        return;
+    }
+
     const Layout::FramebufferLayout layout{Layout::FrameLayoutFromResolutionScale(res_scale)};
     screenshot_image = QImage(QSize(layout.width, layout.height), QImage::Format_RGB32);
     renderer.RequestScreenshot(