summaryrefslogtreecommitdiffstats
path: root/src/opengl/qgl_win.cpp
diff options
context:
space:
mode:
authorRhys Weatherley <rhys.weatherley@nokia.com>2009-09-14 02:30:44 (GMT)
committerRhys Weatherley <rhys.weatherley@nokia.com>2009-09-14 05:06:06 (GMT)
commit9e3fb515207f8d80fe87b6e34e78d3d201b0b438 (patch)
treee89933d4ba8f65f5099e1beaab33a514c247e2cd /src/opengl/qgl_win.cpp
parent732660e89af34c76f6aa8a46ce8507dfd5fad077 (diff)
downloadQt-9e3fb515207f8d80fe87b6e34e78d3d201b0b438.zip
Qt-9e3fb515207f8d80fe87b6e34e78d3d201b0b438.tar.gz
Qt-9e3fb515207f8d80fe87b6e34e78d3d201b0b438.tar.bz2
Performance: reduce TLS overhead of QGLContext::currentContext()
The handling for the current QGLContext was looking up the same TLS data several times per call (hasLocalData() and localData() calls particularly). This change also refactors the code a little so that the setting of the QGLContext within makeCurrent() and doneCurrent() is in one location in the code instead of six (one per platform). Reviewed-by: Michael Brasser Reviewed-by: Sarah Smith
Diffstat (limited to 'src/opengl/qgl_win.cpp')
-rw-r--r--src/opengl/qgl_win.cpp10
1 files changed, 2 insertions, 8 deletions
diff --git a/src/opengl/qgl_win.cpp b/src/opengl/qgl_win.cpp
index 78dad80..2f9e225 100644
--- a/src/opengl/qgl_win.cpp
+++ b/src/opengl/qgl_win.cpp
@@ -1173,11 +1173,7 @@ void QGLContext::makeCurrent()
}
if (wglMakeCurrent(d->dc, d->rc)) {
- if (!qgl_context_storage.hasLocalData() && QThread::currentThread())
- qgl_context_storage.setLocalData(new QGLThreadContext);
- if (qgl_context_storage.hasLocalData())
- qgl_context_storage.localData()->context = this;
- currentCtx = this;
+ QGLContextPrivate::setCurrentContext(this);
} else {
qwglError("QGLContext::makeCurrent()", "wglMakeCurrent");
}
@@ -1187,10 +1183,8 @@ void QGLContext::makeCurrent()
void QGLContext::doneCurrent()
{
Q_D(QGLContext);
- currentCtx = 0;
wglMakeCurrent(0, 0);
- if (qgl_context_storage.hasLocalData())
- qgl_context_storage.localData()->context = 0;
+ QGLContextPrivate::setCurrentContext(0);
if (deviceIsPixmap() && d->hbitmap) {
QPixmap *pm = static_cast<QPixmap *>(d->paintDevice);
*pm = QPixmap::fromWinHBITMAP(d->hbitmap);