diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index cfd6e08aa..ccaf6964f 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -2026,8 +2026,8 @@ MainWindow::on_actionRenderer_options_triggered() ui->stackedWidget->switchRenderer(static_cast(vid_api)); if (show_second_monitors) { for (int i = 1; i < MONITORS_NUM; i++) { - if (renderers[i] && renderers[i]->reloadRendererOption() && renderers[i]->hasOptions()) { - ui->stackedWidget->switchRenderer(static_cast(vid_api)); + if (renderers[i]) { + renderers[i]->switchRenderer(static_cast(vid_api)); } } } diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index bd1fd2609..2b1cfdf26 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -288,7 +288,8 @@ RendererStack::leaveEvent(QEvent *event) void RendererStack::switchRenderer(Renderer renderer) { - startblit(); + //startblit(); + switchInProgress = true; if (current) { rendererWindow->finalize(); removeWidget(current.get()); @@ -349,7 +350,7 @@ RendererStack::createRenderer(Renderer renderer) connect(hw, &OpenGLRenderer::initialized, [=]() { /* Buffers are available only after initialization. */ imagebufs = rendererWindow->getBuffers(); - endblit(); + switchInProgress = false; emit rendererChanged(); }); connect(hw, &OpenGLRenderer::errorInitializing, [=]() { @@ -381,7 +382,7 @@ RendererStack::createRenderer(Renderer renderer) connect(hw, &VulkanWindowRenderer::rendererInitialized, [=]() { /* Buffers are available only after initialization. */ imagebufs = rendererWindow->getBuffers(); - endblit(); + switchInProgress = false; emit rendererChanged(); }); connect(hw, &VulkanWindowRenderer::errorInitializing, [=]() { @@ -413,7 +414,7 @@ RendererStack::createRenderer(Renderer renderer) if (renderer != Renderer::OpenGL3 && renderer != Renderer::Vulkan) { imagebufs = rendererWindow->getBuffers(); - endblit(); + switchInProgress = false; emit rendererChanged(); } } @@ -423,7 +424,7 @@ void RendererStack::blit(int x, int y, int w, int h) { if ((x < 0) || (y < 0) || (w <= 0) || (h <= 0) || - (w > 2048) || (h > 2048) || + (w > 2048) || (h > 2048) || (switchInProgress) || (monitors[m_monitor_index].target_buffer == NULL) || imagebufs.empty() || std::get(imagebufs[currentBuf])->test_and_set()) { video_blit_complete_monitor(m_monitor_index); diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index 309cae7f5..54ea49bb9 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -113,6 +113,7 @@ private: std::unique_ptr current; std::atomic_bool rendererTakesScreenshots; + std::atomic_bool switchInProgress{false}; }; #endif // QT_RENDERERCONTAINER_HPP