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); |     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, | void RendererBase::RequestScreenshot(void* data, std::function<void(bool)> callback, | ||||||
|                                      const Layout::FramebufferLayout& layout) { |                                      const Layout::FramebufferLayout& layout) { | ||||||
|     if (renderer_settings.screenshot_requested) { |     if (renderer_settings.screenshot_requested) { | ||||||
|   | |||||||
| @@ -83,6 +83,9 @@ public: | |||||||
|     /// Refreshes the settings common to all renderers |     /// Refreshes the settings common to all renderers | ||||||
|     void RefreshBaseSettings(); |     void RefreshBaseSettings(); | ||||||
|  |  | ||||||
|  |     /// Returns true if a screenshot is being processed | ||||||
|  |     bool IsScreenshotPending() const; | ||||||
|  |  | ||||||
|     /// Request a screenshot of the next frame |     /// Request a screenshot of the next frame | ||||||
|     void RequestScreenshot(void* data, std::function<void(bool)> callback, |     void RequestScreenshot(void* data, std::function<void(bool)> callback, | ||||||
|                            const Layout::FramebufferLayout& layout); |                            const Layout::FramebufferLayout& layout); | ||||||
|   | |||||||
| @@ -933,6 +933,12 @@ void GRenderWindow::CaptureScreenshot(const QString& screenshot_path) { | |||||||
|     auto& renderer = system.Renderer(); |     auto& renderer = system.Renderer(); | ||||||
|     const f32 res_scale = Settings::values.resolution_info.up_factor; |     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)}; |     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); | ||||||
|     renderer.RequestScreenshot( |     renderer.RequestScreenshot( | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user