Merge pull request #5356 from Cacodemon345/multi-monitor-fixes

Don't use startblit/endblit for renderer switches
This commit is contained in:
Miran Grča
2025-03-16 16:45:58 +01:00
committed by GitHub
3 changed files with 9 additions and 7 deletions

View File

@@ -2026,8 +2026,8 @@ MainWindow::on_actionRenderer_options_triggered()
ui->stackedWidget->switchRenderer(static_cast<RendererStack::Renderer>(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<RendererStack::Renderer>(vid_api));
if (renderers[i]) {
renderers[i]->switchRenderer(static_cast<RendererStack::Renderer>(vid_api));
}
}
}

View File

@@ -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<std::atomic_flag *>(imagebufs[currentBuf])->test_and_set()) {
video_blit_complete_monitor(m_monitor_index);

View File

@@ -113,6 +113,7 @@ private:
std::unique_ptr<QWidget> current;
std::atomic_bool rendererTakesScreenshots;
std::atomic_bool switchInProgress{false};
};
#endif // QT_RENDERERCONTAINER_HPP