diff options
author | Tom Cooksey <thomas.cooksey@nokia.com> | 2010-04-16 09:50:55 (GMT) |
---|---|---|
committer | Tom Cooksey <thomas.cooksey@nokia.com> | 2010-04-16 12:52:13 (GMT) |
commit | 74f28819d985984170964d12d8f527034db93017 (patch) | |
tree | 6c1650f2c0b2cbd70d79e55de8f8edf20107d093 /src | |
parent | 5480e3b68da98253ae6ec58bd0db0075225a4e22 (diff) | |
download | Qt-74f28819d985984170964d12d8f527034db93017.zip Qt-74f28819d985984170964d12d8f527034db93017.tar.gz Qt-74f28819d985984170964d12d8f527034db93017.tar.bz2 |
Set EGL_SWAP_BEHAVIOR to EGL_BUFFER_PRESERVED for regular QWidgets
QGLWidgets are assumed to be buffer destroyed, however regular
QWidgets assume they can to partial updates and thus need the
preserved swap behaviour.
Reviewed-By: Trond
Task-number: QTBUG-9554
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/egl/qeglproperties.cpp | 3 | ||||
-rw-r--r-- | src/opengl/qgl_x11egl.cpp | 4 |
2 files changed, 7 insertions, 0 deletions
diff --git a/src/gui/egl/qeglproperties.cpp b/src/gui/egl/qeglproperties.cpp index 5543547..3638de5 100644 --- a/src/gui/egl/qeglproperties.cpp +++ b/src/gui/egl/qeglproperties.cpp @@ -241,6 +241,9 @@ void QEglProperties::setRenderableType(QEgl::API api) // reductions in complexity are possible. bool QEglProperties::reduceConfiguration() { + if (value(EGL_SWAP_BEHAVIOR) != EGL_DONT_CARE) + removeValue(EGL_SWAP_BEHAVIOR); + #ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT // For OpenVG, we sometimes try to create a surface using a pre-multiplied format. If we can't // find a config which supports pre-multiplied formats, remove the flag on the surface type: diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp index 6f210ce..d67a3ea 100644 --- a/src/opengl/qgl_x11egl.cpp +++ b/src/opengl/qgl_x11egl.cpp @@ -199,6 +199,10 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) configProps.setRenderableType(QEgl::OpenGL); qt_eglproperties_set_glformat(configProps, d->glFormat); + // Set buffer preserved for regular QWidgets, QGLWidgets are ok with either preserved or destroyed: + if ((devType == QInternal::Widget) && qobject_cast<QGLWidget*>(static_cast<QWidget*>(device())) == 0) + configProps.setValue(EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED); + if (!d->eglContext->chooseConfig(configProps, QEgl::BestPixelFormat)) { delete d->eglContext; d->eglContext = 0; |