Allow creation of QOpenGLShaderProgram without a current context

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>
bb10
Sean Harmer 2012-05-02 10:10:39 +01:00 committed by Qt by Nokia
parent c73ddb0c0e
commit b17814e6ff
1 changed files with 3 additions and 3 deletions

View 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)
{
}