diff options
| author | Samuel Rødal <[email protected]> | 2013-04-23 10:03:48 +0200 |
|---|---|---|
| committer | The Qt Project <[email protected]> | 2013-04-23 18:57:45 +0200 |
| commit | 1f6ab6a661a468dc6b5fb2dc24b05148e052c858 (patch) | |
| tree | 077325f94b3a14f68632bb376408d6c34f777061 | |
| parent | 146658a10f290603470b800d71b778239e764312 (diff) | |
Fixed QGLWidget not being able to be made current with a context.
If the QGLWidget's creation is triggered by a sibling or similar being
created it would end up without the surface type OpenGLSurface. We need
to make sure the QWindow has the correct surface type to prevent
QOpenGLContext::makeCurrent() from failing.
Task-number: QTBUG-30811
Change-Id: Ifc85f9120d89bd0bed4a3911233799830cb3a0f3
Reviewed-by: Jørgen Lind <[email protected]>
| -rw-r--r-- | src/gui/kernel/qopenglcontext.cpp | 2 | ||||
| -rw-r--r-- | src/opengl/qgl_qpa.cpp | 13 |
2 files changed, 10 insertions, 5 deletions
diff --git a/src/gui/kernel/qopenglcontext.cpp b/src/gui/kernel/qopenglcontext.cpp index 483baf0f099..c93752c3d70 100644 --- a/src/gui/kernel/qopenglcontext.cpp +++ b/src/gui/kernel/qopenglcontext.cpp @@ -759,7 +759,7 @@ bool QOpenGLContext::makeCurrent(QSurface *surface) return false; if (surface->surfaceType() != QSurface::OpenGLSurface) { - qWarning() << "QOpenGLContext::makeCurrent() called with non-opengl surface"; + qWarning() << "QOpenGLContext::makeCurrent() called with non-opengl surface" << surface; return false; } diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 0a246546248..f3388ee5efc 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -146,10 +146,15 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) if (widget->testAttribute(Qt::WA_TranslucentBackground)) winFormat.setAlphaBufferSize(qMax(winFormat.alphaBufferSize(), 8)); - if (!widget->windowHandle()->handle()) { - widget->windowHandle()->setSurfaceType(QWindow::OpenGLSurface); - widget->windowHandle()->setFormat(winFormat); - widget->winId();//make window + QWindow *window = widget->windowHandle(); + if (!window->handle() + || window->surfaceType() != QWindow::OpenGLSurface + || window->requestedFormat() != winFormat) + { + window->setSurfaceType(QWindow::OpenGLSurface); + window->setFormat(winFormat); + window->destroy(); + window->create(); } if (d->ownContext) |
