bootmanager: Don't create another screenshot request if previous one is not done yet
This commit is contained in:
		| @@ -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) { | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -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( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user