Merge pull request #5356 from Cacodemon345/multi-monitor-fixes
Don't use startblit/endblit for renderer switches
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -113,6 +113,7 @@ private:
|
||||
std::unique_ptr<QWidget> current;
|
||||
|
||||
std::atomic_bool rendererTakesScreenshots;
|
||||
std::atomic_bool switchInProgress{false};
|
||||
};
|
||||
|
||||
#endif // QT_RENDERERCONTAINER_HPP
|
||||
|
||||
Reference in New Issue
Block a user