|author||Samuel Rødal <email@example.com>||2012-11-26 12:57:09 +0100|
|committer||The Qt Project <firstname.lastname@example.org>||2012-11-30 18:28:04 +0100|
Added explicit threading API to QtOpenGL.
Since QtOpenGL/QGLContext is implemented in terms of QtGui/QOpenGLContext which has stricter requirements about how it's supposed to be used, we need to apply these requirements to QGLContext as well. This change adds QGLContext::moveToThread(QThread *) and documents it as a necessity for making a context current on another thread. Also introduces QGLPixelbuffer::context() to access the QGLContext of a pixelbuffer, and made QGLWidget::context() return a non-const QGLContext, since there's no good reason why it shouldn't, and it leads to less const_cast clutter. We could have introduced a backdoor in QOpenGLContext instead, making it loosen its requirements, but that would have made it harder / impossible to fully support threaded OpenGL in all the platforms. Task-number: QTBUG-22560 Change-Id: Ibb6f65f342e7c963e80cc42ab5664c5f1cab30b0 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Gunnar Sletta <email@example.com>
Diffstat (limited to 'dist')
1 files changed, 9 insertions, 0 deletions
diff --git a/dist/changes-5.0.0 b/dist/changes-5.0.0
index 056b7506f0..c76f216fb5 100644
@@ -676,6 +676,15 @@ QtOpenGL
which were deprecated in Qt 4 have been removed.
* Previously deprecated default value listBase parameter has been removed from
both QGLWidget::renderText() functions.
+* In order to ensure support on more platforms, stricter requirements have been
+ introduced for doing threaded OpenGL. First, you must call makeCurrent() at
+ least once per swapBuffers() call, so that the platform has a chance to
+ synchronize resizes to the OpenGL surface. Second, before doing makeCurrent()
+ or swapBuffers() in a separate thread, you must call
+ QGLContext::moveToThread(QThread *) to explicitly let Qt know in which thread
+ a QGLContext is currently being used. You also need to make sure that the
+ context is not current in the current thread before moving it to a different