From 66be8fcc05f0e51f12c215af3d5ab74d729386ba Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Thu, 7 May 2015 19:09:39 +0200 Subject: Create contexts and pbuffers with the correct screen in QQuickWidget Change-Id: I8e9db998eee0af5f62c1384f2dcb2028254cc642 Reviewed-by: Gunnar Sletta --- src/quickwidgets/qquickwidget.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/quickwidgets') diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp index 38dde806ed..f0a2a3183b 100644 --- a/src/quickwidgets/qquickwidget.cpp +++ b/src/quickwidgets/qquickwidget.cpp @@ -691,8 +691,10 @@ void QQuickWidgetPrivate::createContext() context = new QOpenGLContext; context->setFormat(offscreenWindow->requestedFormat()); - if (qt_gl_global_share_context()) + if (qt_gl_global_share_context()) { context->setShareContext(qt_gl_global_share_context()); + context->setScreen(context->shareContext()->screen()); + } if (!context->create()) { const bool isEs = context->isOpenGLES(); @@ -707,6 +709,7 @@ void QQuickWidgetPrivate::createContext() // contains a QSurfaceFormat representing the _actual_ format of the underlying // configuration. This is essential to get a surface that is compatible with the context. offscreenSurface->setFormat(context->format()); + offscreenSurface->setScreen(context->screen()); offscreenSurface->create(); } @@ -742,7 +745,14 @@ void QQuickWidget::createFramebufferObject() if (context->shareContext() != QWidgetPrivate::get(window())->shareContext()) { context->setShareContext(QWidgetPrivate::get(window())->shareContext()); - context->create(); + context->setScreen(context->shareContext()->screen()); + if (!context->create()) + qWarning("QQuickWidget: Failed to recreate context"); + // The screen may be different so we must recreate the offscreen surface too. + // Unlike QOpenGLContext, QOffscreenSurface's create() does not recreate so have to destroy() first. + d->offscreenSurface->destroy(); + d->offscreenSurface->setScreen(context->screen()); + d->offscreenSurface->create(); } context->makeCurrent(d->offscreenSurface); -- cgit v1.2.3 From db525935ccd64d2c5c674f8a66dbe7096d754e9f Mon Sep 17 00:00:00 2001 From: Joni Poikelin Date: Fri, 29 May 2015 08:13:58 +0300 Subject: Fix flickering when QQuickWidget becomes visible QQuickWidget used short delay before rendering. This caused black area to flash on the widget briefly. Instead of scheduling redraw, render scene immediately. Task-number: QTBUG-46387 Change-Id: I342d96a1aaef3244190221807b0d816815697623 Reviewed-by: Gunnar Sletta Reviewed-by: Laszlo Agocs --- src/quickwidgets/qquickwidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/quickwidgets') diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp index f0a2a3183b..608c5f93f5 100644 --- a/src/quickwidgets/qquickwidget.cpp +++ b/src/quickwidgets/qquickwidget.cpp @@ -1065,7 +1065,7 @@ void QQuickWidget::showEvent(QShowEvent *) Q_D(QQuickWidget); d->updatePending = false; d->createContext(); - triggerUpdate(); + d->render(true); } /*! \reimp */ -- cgit v1.2.3