Allow creation of QOpenGLShaderProgram without a current context
authorSean Harmer <sean.harmer@kdab.com>
Wed, 2 May 2012 09:10:39 +0000 (10:10 +0100)
committerQt by Nokia <qt-info@nokia.com>
Wed, 2 May 2012 09:36:36 +0000 (11:36 +0200)
This change prevents the qWarning() in QOpenGLFunctions from being
triggered when creating a QOpenGLShaderProgram object without a current
QOpenGLContext. This is a common case especially when the shader program
is a member variable of a class.

It now relies upon the QOpenGLShaderProgram::init() function to resolve
the GL function pointers when the shader program is first used which of
course should be done with an active context.

Change-Id: Ib7dc345593f2a70d72ef8f650151cc90001058ca
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
src/gui/opengl/qopenglshaderprogram.cpp

index 8ee2928..c0899e5 100644 (file)
@@ -510,7 +510,7 @@ class QOpenGLShaderProgramPrivate : public QObjectPrivate
 {
     Q_DECLARE_PUBLIC(QOpenGLShaderProgram)
 public:
-    QOpenGLShaderProgramPrivate(QOpenGLContext *ctx)
+    QOpenGLShaderProgramPrivate()
         : programGuard(0)
         , linked(false)
         , inited(false)
@@ -518,7 +518,7 @@ public:
         , geometryVertexCount(64)
         , geometryInputType(0)
         , geometryOutputType(0)
-        , glfuncs(new QOpenGLFunctions(ctx))
+        , glfuncs(new QOpenGLFunctions)
     {
     }
     ~QOpenGLShaderProgramPrivate();
@@ -574,7 +574,7 @@ bool QOpenGLShaderProgramPrivate::hasShader(QOpenGLShader::ShaderType type) cons
     \sa addShader()
 */
 QOpenGLShaderProgram::QOpenGLShaderProgram(QObject *parent)
-    : QObject(*new QOpenGLShaderProgramPrivate(QOpenGLContext::currentContext()), parent)
+    : QObject(*new QOpenGLShaderProgramPrivate, parent)
 {
 }