Don't use starblit/endblit for renderer switches
This commit is contained in:
@@ -2025,8 +2025,8 @@ MainWindow::on_actionRenderer_options_triggered()
|
|||||||
ui->stackedWidget->switchRenderer(static_cast<RendererStack::Renderer>(vid_api));
|
ui->stackedWidget->switchRenderer(static_cast<RendererStack::Renderer>(vid_api));
|
||||||
if (show_second_monitors) {
|
if (show_second_monitors) {
|
||||||
for (int i = 1; i < MONITORS_NUM; i++) {
|
for (int i = 1; i < MONITORS_NUM; i++) {
|
||||||
if (renderers[i] && renderers[i]->reloadRendererOption() && renderers[i]->hasOptions()) {
|
if (renderers[i]) {
|
||||||
ui->stackedWidget->switchRenderer(static_cast<RendererStack::Renderer>(vid_api));
|
renderers[i]->switchRenderer(static_cast<RendererStack::Renderer>(vid_api));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -288,7 +288,8 @@ RendererStack::leaveEvent(QEvent *event)
|
|||||||
void
|
void
|
||||||
RendererStack::switchRenderer(Renderer renderer)
|
RendererStack::switchRenderer(Renderer renderer)
|
||||||
{
|
{
|
||||||
startblit();
|
//startblit();
|
||||||
|
switchInProgress = true;
|
||||||
if (current) {
|
if (current) {
|
||||||
rendererWindow->finalize();
|
rendererWindow->finalize();
|
||||||
removeWidget(current.get());
|
removeWidget(current.get());
|
||||||
@@ -349,7 +350,7 @@ RendererStack::createRenderer(Renderer renderer)
|
|||||||
connect(hw, &OpenGLRenderer::initialized, [=]() {
|
connect(hw, &OpenGLRenderer::initialized, [=]() {
|
||||||
/* Buffers are available only after initialization. */
|
/* Buffers are available only after initialization. */
|
||||||
imagebufs = rendererWindow->getBuffers();
|
imagebufs = rendererWindow->getBuffers();
|
||||||
endblit();
|
switchInProgress = false;
|
||||||
emit rendererChanged();
|
emit rendererChanged();
|
||||||
});
|
});
|
||||||
connect(hw, &OpenGLRenderer::errorInitializing, [=]() {
|
connect(hw, &OpenGLRenderer::errorInitializing, [=]() {
|
||||||
@@ -381,7 +382,7 @@ RendererStack::createRenderer(Renderer renderer)
|
|||||||
connect(hw, &VulkanWindowRenderer::rendererInitialized, [=]() {
|
connect(hw, &VulkanWindowRenderer::rendererInitialized, [=]() {
|
||||||
/* Buffers are available only after initialization. */
|
/* Buffers are available only after initialization. */
|
||||||
imagebufs = rendererWindow->getBuffers();
|
imagebufs = rendererWindow->getBuffers();
|
||||||
endblit();
|
switchInProgress = false;
|
||||||
emit rendererChanged();
|
emit rendererChanged();
|
||||||
});
|
});
|
||||||
connect(hw, &VulkanWindowRenderer::errorInitializing, [=]() {
|
connect(hw, &VulkanWindowRenderer::errorInitializing, [=]() {
|
||||||
@@ -413,7 +414,7 @@ RendererStack::createRenderer(Renderer renderer)
|
|||||||
|
|
||||||
if (renderer != Renderer::OpenGL3 && renderer != Renderer::Vulkan) {
|
if (renderer != Renderer::OpenGL3 && renderer != Renderer::Vulkan) {
|
||||||
imagebufs = rendererWindow->getBuffers();
|
imagebufs = rendererWindow->getBuffers();
|
||||||
endblit();
|
switchInProgress = false;
|
||||||
emit rendererChanged();
|
emit rendererChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -423,7 +424,7 @@ void
|
|||||||
RendererStack::blit(int x, int y, int w, int h)
|
RendererStack::blit(int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
if ((x < 0) || (y < 0) || (w <= 0) || (h <= 0) ||
|
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() ||
|
(monitors[m_monitor_index].target_buffer == NULL) || imagebufs.empty() ||
|
||||||
std::get<std::atomic_flag *>(imagebufs[currentBuf])->test_and_set()) {
|
std::get<std::atomic_flag *>(imagebufs[currentBuf])->test_and_set()) {
|
||||||
video_blit_complete_monitor(m_monitor_index);
|
video_blit_complete_monitor(m_monitor_index);
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ private:
|
|||||||
std::unique_ptr<QWidget> current;
|
std::unique_ptr<QWidget> current;
|
||||||
|
|
||||||
std::atomic_bool rendererTakesScreenshots;
|
std::atomic_bool rendererTakesScreenshots;
|
||||||
|
std::atomic_bool switchInProgress{false};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // QT_RENDERERCONTAINER_HPP
|
#endif // QT_RENDERERCONTAINER_HPP
|
||||||
|
|||||||
Reference in New Issue
Block a user