diff options
author | Trond Kjernåsen <trond.kjernasen@nokia.com> | 2010-07-08 15:31:16 (GMT) |
---|---|---|
committer | Trond Kjernåsen <trond.kjernasen@nokia.com> | 2010-07-08 15:35:47 (GMT) |
commit | e02d97c50cee8bdc662bb1183ed01aa0dac53f01 (patch) | |
tree | 8a03912f4e3db9cbd512d77c1180bba9ebc0e996 /src | |
parent | 2d691f6e743cad6efb676854ac65218a1cbe5e5f (diff) | |
download | Qt-e02d97c50cee8bdc662bb1183ed01aa0dac53f01.zip Qt-e02d97c50cee8bdc662bb1183ed01aa0dac53f01.tar.gz Qt-e02d97c50cee8bdc662bb1183ed01aa0dac53f01.tar.bz2 |
Track the GL DCs we use across different threads under Windows.
A DC returned by GetDC() is only valid within the context of the calling
thread, so we need to track which tread a DC belongs to.
Reviewed-by: Kim
Diffstat (limited to 'src')
-rw-r--r-- | src/opengl/qgl.cpp | 1 | ||||
-rw-r--r-- | src/opengl/qgl_p.h | 1 | ||||
-rw-r--r-- | src/opengl/qgl_win.cpp | 5 |
3 files changed, 6 insertions, 1 deletions
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 3f2af9d..05dae60 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1655,6 +1655,7 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format) #if defined(Q_WS_WIN) dc = 0; win = 0; + threadId = 0; pixelFormatId = 0; cmap = 0; hbitmap = 0; diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index eca4a29..dfbc926 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -347,6 +347,7 @@ public: QGLCmap* cmap; HBITMAP hbitmap; HDC hbitmap_hdc; + Qt::HANDLE threadId; #endif #ifndef QT_NO_EGL uint ownsEglContext : 1; diff --git a/src/opengl/qgl_win.cpp b/src/opengl/qgl_win.cpp index 52988b6..3f13ac4 100644 --- a/src/opengl/qgl_win.cpp +++ b/src/opengl/qgl_win.cpp @@ -1261,6 +1261,7 @@ void QGLContext::reset() } d->dc = 0; d->win = 0; + d->threadId = 0; d->pixelFormatId = 0; d->sharing = false; d->valid = false; @@ -1283,8 +1284,9 @@ void QGLContext::makeCurrent() if (d->rc == wglGetCurrentContext() || !d->valid) // already current return; - if (d->win && !d->dc) { + if (d->win && (!d->dc || d->threadId != QThread::currentThreadId())) { d->dc = GetDC(d->win); + d->threadId = QThread::currentThreadId(); if (!d->dc) { qwglError("QGLContext::makeCurrent()", "GetDC()"); return; @@ -1322,6 +1324,7 @@ void QGLContext::doneCurrent() if (d->win && d->dc) { ReleaseDC(d->win, d->dc); d->dc = 0; + d->threadId = 0; } } |