// qglshaderprogram.sip generated by MetaSIP on Fri Apr 16 11:32:08 2010
//
// This file is part of the QtOpenGL Python extension module.
//
// Copyright (c) 2010 Riverbank Computing Limited <info@riverbankcomputing.com>
// 
// This file is part of PyQt.
// 
// This file may be used under the terms of the GNU General Public
// License versions 2.0 or 3.0 as published by the Free Software
// Foundation and appearing in the files LICENSE.GPL2 and LICENSE.GPL3
// included in the packaging of this file.  Alternatively you may (at
// your option) use any later version of the GNU General Public
// License if such license has been publicly approved by Riverbank
// Computing Limited (or its successors, if any) and the KDE Free Qt
// Foundation. In addition, as a special exception, Riverbank gives you
// certain additional rights. These rights are described in the Riverbank
// GPL Exception version 1.1, which can be found in the file
// GPL_EXCEPTION.txt in this package.
// 
// Please review the following information to ensure GNU General
// Public Licensing requirements will be met:
// http://trolltech.com/products/qt/licenses/licensing/opensource/. If
// you are unsure which license is appropriate for your use, please
// review the following information:
// http://trolltech.com/products/qt/licenses/licensing/licensingoverview
// or contact the sales department at sales@riverbankcomputing.com.
// 
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.


%If (Qt_4_6_0 -)
%ModuleCode
#include <qglshaderprogram.h>
%End
%End

%If (Qt_4_6_0 -)

class QGLShader : QObject
{

%TypeHeaderCode
#include <qglshaderprogram.h>
%End

public:
    enum ShaderTypeBit
    {
        Vertex,
        Fragment,
    };

    typedef QFlags<QGLShader::ShaderTypeBit> ShaderType;
    QGLShader(QFlags<QGLShader::ShaderTypeBit>, QObject *parent /TransferThis/ = 0);
    QGLShader(QFlags<QGLShader::ShaderTypeBit>, const QGLContext *, QObject *parent /TransferThis/ = 0);
    virtual ~QGLShader();
    QFlags<QGLShader::ShaderTypeBit> shaderType() const;
    bool compileSourceCode(const QByteArray &);
    bool compileSourceCode(const QString &);
    bool compileSourceFile(const QString &);
    QByteArray sourceCode() const;
    bool isCompiled() const;
    QString log() const;
    GLuint shaderId() const;

private:
    QGLShader(const QGLShader &);
};

%End
%If (Qt_4_6_0 -)
QFlags<QGLShader::ShaderTypeBit> operator|(QGLShader::ShaderTypeBit, QFlags<QGLShader::ShaderTypeBit>);
%End
%If (Qt_4_6_0 -)

class QGLShaderProgram : QObject
{

%TypeHeaderCode
#include <qglshaderprogram.h>
%End

public:
    explicit QGLShaderProgram(QObject *parent /TransferThis/ = 0);
    QGLShaderProgram(const QGLContext *, QObject *parent /TransferThis/ = 0);
    virtual ~QGLShaderProgram();
    bool addShader(QGLShader *);
    void removeShader(QGLShader *);
    QList<QGLShader*> shaders() const;
    bool addShaderFromSourceCode(QFlags<QGLShader::ShaderTypeBit>, const QByteArray &);
    bool addShaderFromSourceCode(QFlags<QGLShader::ShaderTypeBit>, const QString &);
    bool addShaderFromSourceFile(QFlags<QGLShader::ShaderTypeBit>, const QString &);
    void removeAllShaders();
    virtual bool link();
    bool isLinked() const;
    QString log() const;
    bool bind();
    void release();
    GLuint programId() const;
    void bindAttributeLocation(const QByteArray &, int);
    void bindAttributeLocation(const QString &, int);
    int attributeLocation(const QByteArray &) const;
    int attributeLocation(const QString &) const;
    void setAttributeValue(int, GLfloat);
    void setAttributeValue(int, GLfloat, GLfloat);
    void setAttributeValue(int, GLfloat, GLfloat, GLfloat);
    void setAttributeValue(int, GLfloat, GLfloat, GLfloat, GLfloat);
    void setAttributeValue(int, const QVector2D &);
    void setAttributeValue(int, const QVector3D &);
    void setAttributeValue(int, const QVector4D &);
    void setAttributeValue(int, const QColor &);
    void setAttributeValue(const char *, GLfloat);
    void setAttributeValue(const char *, GLfloat, GLfloat);
    void setAttributeValue(const char *, GLfloat, GLfloat, GLfloat);
    void setAttributeValue(const char *, GLfloat, GLfloat, GLfloat, GLfloat);
    void setAttributeValue(const char *, const QVector2D &);
    void setAttributeValue(const char *, const QVector3D &);
    void setAttributeValue(const char *, const QVector4D &);
    void setAttributeValue(const char *, const QColor &);
    void enableAttributeArray(int);
    void enableAttributeArray(const char *);
    void disableAttributeArray(int);
    void disableAttributeArray(const char *);
    int uniformLocation(const QByteArray &) const;
    int uniformLocation(const QString &) const;
    void setUniformValue(int, GLint /Constrained/);
    void setUniformValue(int, GLfloat /Constrained/);
    void setUniformValue(int, GLfloat, GLfloat);
    void setUniformValue(int, GLfloat, GLfloat, GLfloat);
    void setUniformValue(int, GLfloat, GLfloat, GLfloat, GLfloat);
    void setUniformValue(int, const QVector2D &);
    void setUniformValue(int, const QVector3D &);
    void setUniformValue(int, const QVector4D &);
    void setUniformValue(int, const QColor &);
    void setUniformValue(int, const QPoint &);
    void setUniformValue(int, const QPointF &);
    void setUniformValue(int, const QSize &);
    void setUniformValue(int, const QSizeF &);
    void setUniformValue(int, const QMatrix2x2 &);
    void setUniformValue(int, const QMatrix2x3 &);
    void setUniformValue(int, const QMatrix2x4 &);
    void setUniformValue(int, const QMatrix3x2 &);
    void setUniformValue(int, const QMatrix3x3 &);
    void setUniformValue(int, const QMatrix3x4 &);
    void setUniformValue(int, const QMatrix4x2 &);
    void setUniformValue(int, const QMatrix4x3 &);
    void setUniformValue(int, const QMatrix4x4 &);
    void setUniformValue(int, const QTransform &);
    void setUniformValue(const char *, GLint /Constrained/);
    void setUniformValue(const char *, GLfloat /Constrained/);
    void setUniformValue(const char *, GLfloat, GLfloat);
    void setUniformValue(const char *, GLfloat, GLfloat, GLfloat);
    void setUniformValue(const char *, GLfloat, GLfloat, GLfloat, GLfloat);
    void setUniformValue(const char *, const QVector2D &);
    void setUniformValue(const char *, const QVector3D &);
    void setUniformValue(const char *, const QVector4D &);
    void setUniformValue(const char *, const QColor &);
    void setUniformValue(const char *, const QPoint &);
    void setUniformValue(const char *, const QPointF &);
    void setUniformValue(const char *, const QSize &);
    void setUniformValue(const char *, const QSizeF &);
    void setUniformValue(const char *, const QMatrix2x2 &);
    void setUniformValue(const char *, const QMatrix2x3 &);
    void setUniformValue(const char *, const QMatrix2x4 &);
    void setUniformValue(const char *, const QMatrix3x2 &);
    void setUniformValue(const char *, const QMatrix3x3 &);
    void setUniformValue(const char *, const QMatrix3x4 &);
    void setUniformValue(const char *, const QMatrix4x2 &);
    void setUniformValue(const char *, const QMatrix4x3 &);
    void setUniformValue(const char *, const QMatrix4x4 &);
    void setUniformValue(const char *, const QTransform &);
    static bool hasOpenGLShaderPrograms(const QGLContext *context = 0);

private:
    QGLShaderProgram(const QGLShaderProgram &);
};

%End
