diff options
author | Trond Kjernåsen <trond@trolltech.com> | 2010-01-13 14:53:04 (GMT) |
---|---|---|
committer | Trond Kjernåsen <trond@trolltech.com> | 2010-01-13 14:53:04 (GMT) |
commit | 7bfc32ca6a462b498b9f349454113cd37f64e89f (patch) | |
tree | a224c41e1228f1aa7decda1ed8370e2df66814dc /src/opengl/qglpixelbuffer_win.cpp | |
parent | 59ee1b9d387468a5a80b5c450aa202d1b33e6bd1 (diff) | |
download | Qt-7bfc32ca6a462b498b9f349454113cd37f64e89f.zip Qt-7bfc32ca6a462b498b9f349454113cd37f64e89f.tar.gz Qt-7bfc32ca6a462b498b9f349454113cd37f64e89f.tar.bz2 |
Rework how Qt handles GL extensions.
Qt used to store the GL extensions a particular implementation supported
in a global cache, which was initialized once and never updated.
This could cause problems because different types of context might
support different kinds of extensions (e.g. the difference between
sw and hw contexts). With this patch, the GL extensions are cached
and updated within each QGLContext. It also makes the extension
initialization lazy, which saves application initialization costs for
embedded platforms.
The patch introduces a internal cross platform QGLTemporaryContext
class that is used to create a light-weight GL context without going
via QGLWidget and friends (QWS and WinCE still have QGLWidget fallbacks
for now).
Reviewed-by: Kim
Reviewed-by: Samuel
Diffstat (limited to 'src/opengl/qglpixelbuffer_win.cpp')
-rw-r--r-- | src/opengl/qglpixelbuffer_win.cpp | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/opengl/qglpixelbuffer_win.cpp b/src/opengl/qglpixelbuffer_win.cpp index a986ccf..8d0d105 100644 --- a/src/opengl/qglpixelbuffer_win.cpp +++ b/src/opengl/qglpixelbuffer_win.cpp @@ -221,7 +221,7 @@ static void qt_format_to_attrib_list(bool has_render_texture, const QGLFormat &f } if ((f.redBufferSize() > 8 || f.greenBufferSize() > 8 || f.blueBufferSize() > 8 || f.alphaBufferSize() > 8) - && (QGLExtensions::glExtensions & QGLExtensions::NVFloatBuffer)) + && (QGLExtensions::glExtensions() & QGLExtensions::NVFloatBuffer)) { attribs[i++] = WGL_FLOAT_COMPONENTS_NV; attribs[i++] = TRUE; @@ -368,11 +368,9 @@ void QGLPixelBuffer::releaseFromDynamicTexture() bool QGLPixelBuffer::hasOpenGLPbuffers() { bool ret = false; - QGLWidget *dmy = 0; - if (!QGLContext::currentContext()) { - dmy = new QGLWidget; - dmy->makeCurrent(); - } + QGLTemporaryContext *tmpContext = 0; + if (!QGLContext::currentContext()) + tmpContext = new QGLTemporaryContext; PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB"); if (wglGetExtensionsStringARB) { @@ -382,8 +380,8 @@ bool QGLPixelBuffer::hasOpenGLPbuffers() ret = true; } } - if (dmy) - delete dmy; + if (tmpContext) + delete tmpContext; return ret; } |