123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 | // Copyright (C) 2016 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#ifndef QOPENGLSHADERPROGRAM_H#define QOPENGLSHADERPROGRAM_H#include <QtCore/qobject.h>#include <QtOpenGL/qtopenglglobal.h>#include <QtGui/qopengl.h>#include <QtGui/qvector2d.h>#include <QtGui/qvector3d.h>#include <QtGui/qvector4d.h>#include <QtGui/qmatrix4x4.h> QT_BEGIN_NAMESPACE class QOpenGLContext;class QOpenGLShaderProgram;class QOpenGLShaderPrivate;class Q_OPENGL_EXPORT QOpenGLShader :public QObject { Q_OBJECT public:enum ShaderTypeBit { Vertex =0x0001, Fragment =0x0002, Geometry =0x0004, TessellationControl =0x0008, TessellationEvaluation =0x0010, Compute =0x0020};Q_DECLARE_FLAGS(ShaderType, ShaderTypeBit)explicitQOpenGLShader(QOpenGLShader::ShaderType type, QObject *parent =nullptr);~QOpenGLShader();QOpenGLShader::ShaderType shaderType()const;boolcompileSourceCode(const char*source);boolcompileSourceCode(const QByteArray& source);boolcompileSourceCode(const QString& source);boolcompileSourceFile(const QString& fileName); QByteArray sourceCode()const;boolisCompiled()const; QString log()const; GLuint shaderId()const;static boolhasOpenGLShaders(ShaderType type, QOpenGLContext *context =nullptr);private:friend class QOpenGLShaderProgram;Q_DISABLE_COPY(QOpenGLShader)Q_DECLARE_PRIVATE(QOpenGLShader)};Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLShader::ShaderType)class QOpenGLShaderProgramPrivate;class Q_OPENGL_EXPORT QOpenGLShaderProgram :public QObject { Q_OBJECT public:explicitQOpenGLShaderProgram(QObject *parent =nullptr);~QOpenGLShaderProgram();booladdShader(QOpenGLShader *shader);voidremoveShader(QOpenGLShader *shader); QList<QOpenGLShader *>shaders()const;booladdShaderFromSourceCode(QOpenGLShader::ShaderType type,const char*source);booladdShaderFromSourceCode(QOpenGLShader::ShaderType type,const QByteArray& source);booladdShaderFromSourceCode(QOpenGLShader::ShaderType type,const QString& source);booladdShaderFromSourceFile(QOpenGLShader::ShaderType type,const QString& fileName);booladdCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type,const char*source);booladdCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type,const QByteArray &source);booladdCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type,const QString &source);booladdCacheableShaderFromSourceFile(QOpenGLShader::ShaderType type,const QString &fileName);voidremoveAllShaders();virtualboollink();boolisLinked()const; QString log()const;boolbind();voidrelease();boolcreate(); GLuint programId()const;intmaxGeometryOutputVertices()const;voidsetPatchVertexCount(int count);intpatchVertexCount()const;voidsetDefaultOuterTessellationLevels(const QList<float> &levels); QList<float>defaultOuterTessellationLevels()const;voidsetDefaultInnerTessellationLevels(const QList<float> &levels); QList<float>defaultInnerTessellationLevels()const;voidbindAttributeLocation(const char*name,int location);voidbindAttributeLocation(const QByteArray& name,int location);voidbindAttributeLocation(const QString& name,int location);intattributeLocation(const char*name)const;intattributeLocation(const QByteArray& name)const;intattributeLocation(const QString& name)const;voidsetAttributeValue(int location, GLfloat value);voidsetAttributeValue(int location, GLfloat x, GLfloat y);voidsetAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z);voidsetAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);voidsetAttributeValue(int location,const QVector2D& value);voidsetAttributeValue(int location,const QVector3D& value);voidsetAttributeValue(int location,const QVector4D& value);voidsetAttributeValue(int location,const QColor& value);voidsetAttributeValue(int location,const GLfloat *values,int columns,int rows);voidsetAttributeValue(const char*name, GLfloat value);voidsetAttributeValue(const char*name, GLfloat x, GLfloat y);voidsetAttributeValue(const char*name, GLfloat x, GLfloat y, GLfloat z);voidsetAttributeValue(const char*name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);voidsetAttributeValue(const char*name,const QVector2D& value);voidsetAttributeValue(const char*name,const QVector3D& value);voidsetAttributeValue(const char*name,const QVector4D& value);voidsetAttributeValue(const char*name,const QColor& value);voidsetAttributeValue(const char*name,const GLfloat *values,int columns,int rows);void setAttributeArray (int location,const GLfloat *values,int tupleSize,int stride =0);void setAttributeArray (int location,const QVector2D *values,int stride =0);void setAttributeArray (int location,const QVector3D *values,int stride =0);void setAttributeArray (int location,const QVector4D *values,int stride =0);void setAttributeArray (int location, GLenum type,const void*values,int tupleSize,int stride =0);void setAttributeArray (const char*name,const GLfloat *values,int tupleSize,int stride =0);void setAttributeArray (const char*name,const QVector2D *values,int stride =0);void setAttributeArray (const char*name,const QVector3D *values,int stride =0);void setAttributeArray (const char*name,const QVector4D *values,int stride =0);void setAttributeArray (const char*name, GLenum type,const void*values,int tupleSize,int stride =0);void setAttributeBuffer (int location, GLenum type,int offset,int tupleSize,int stride =0);void setAttributeBuffer (const char*name, GLenum type,int offset,int tupleSize,int stride =0);voidenableAttributeArray(int location);voidenableAttributeArray(const char*name);voiddisableAttributeArray(int location);voiddisableAttributeArray(const char*name);intuniformLocation(const char*name)const;intuniformLocation(const QByteArray& name)const;intuniformLocation(const QString& name)const;voidsetUniformValue(int location, GLfloat value);voidsetUniformValue(int location, GLint value);voidsetUniformValue(int location, GLuint value);voidsetUniformValue(int location, GLfloat x, GLfloat y);voidsetUniformValue(int location, GLfloat x, GLfloat y, GLfloat z);voidsetUniformValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);voidsetUniformValue(int location,const QVector2D& value);voidsetUniformValue(int location,const QVector3D& value);voidsetUniformValue(int location,const QVector4D& value);voidsetUniformValue(int location,const QColor& color);voidsetUniformValue(int location,const QPoint& point);voidsetUniformValue(int location,const QPointF& point);voidsetUniformValue(int location,const QSize& size);voidsetUniformValue(int location,const QSizeF& size);voidsetUniformValue(int location,const QMatrix2x2& value);voidsetUniformValue(int location,const QMatrix2x3& value);voidsetUniformValue(int location,const QMatrix2x4& value);voidsetUniformValue(int location,const QMatrix3x2& value);voidsetUniformValue(int location,const QMatrix3x3& value);voidsetUniformValue(int location,const QMatrix3x4& value);voidsetUniformValue(int location,const QMatrix4x2& value);voidsetUniformValue(int location,const QMatrix4x3& value);voidsetUniformValue(int location,const QMatrix4x4& value);voidsetUniformValue(int location,const GLfloat value[2][2]);voidsetUniformValue(int location,const GLfloat value[3][3]);voidsetUniformValue(int location,const GLfloat value[4][4]);voidsetUniformValue(int location,const QTransform& value);voidsetUniformValue(const char*name, GLfloat value);voidsetUniformValue(const char*name, GLint value);voidsetUniformValue(const char*name, GLuint value);voidsetUniformValue(const char*name, GLfloat x, GLfloat y);voidsetUniformValue(const char*name, GLfloat x, GLfloat y, GLfloat z);voidsetUniformValue(const char*name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);voidsetUniformValue(const char*name,const QVector2D& value);voidsetUniformValue(const char*name,const QVector3D& value);voidsetUniformValue(const char*name,const QVector4D& value);voidsetUniformValue(const char*name,const QColor& color);voidsetUniformValue(const char*name,const QPoint& point);voidsetUniformValue(const char*name,const QPointF& point);voidsetUniformValue(const char*name,const QSize& size);voidsetUniformValue(const char*name,const QSizeF& size);voidsetUniformValue(const char*name,const QMatrix2x2& value);voidsetUniformValue(const char*name,const QMatrix2x3& value);voidsetUniformValue(const char*name,const QMatrix2x4& value);voidsetUniformValue(const char*name,const QMatrix3x2& value);voidsetUniformValue(const char*name,const QMatrix3x3& value);voidsetUniformValue(const char*name,const QMatrix3x4& value);voidsetUniformValue(const char*name,const QMatrix4x2& value);voidsetUniformValue(const char*name,const QMatrix4x3& value);voidsetUniformValue(const char*name,const QMatrix4x4& value);voidsetUniformValue(const char*name,const GLfloat value[2][2]);voidsetUniformValue(const char*name,const GLfloat value[3][3]);voidsetUniformValue(const char*name,const GLfloat value[4][4]);voidsetUniformValue(const char*name,const QTransform& value);voidsetUniformValueArray(int location,const GLfloat *values,int count,int tupleSize);voidsetUniformValueArray(int location,const GLint *values,int count);voidsetUniformValueArray(int location,const GLuint *values,int count);voidsetUniformValueArray(int location,const QVector2D *values,int count);voidsetUniformValueArray(int location,const QVector3D *values,int count);voidsetUniformValueArray(int location,const QVector4D *values,int count);voidsetUniformValueArray(int location,const QMatrix2x2 *values,int count);voidsetUniformValueArray(int location,const QMatrix2x3 *values,int count);voidsetUniformValueArray(int location,const QMatrix2x4 *values,int count);voidsetUniformValueArray(int location,const QMatrix3x2 *values,int count);voidsetUniformValueArray(int location,const QMatrix3x3 *values,int count);voidsetUniformValueArray(int location,const QMatrix3x4 *values,int count);voidsetUniformValueArray(int location,const QMatrix4x2 *values,int count);voidsetUniformValueArray(int location,const QMatrix4x3 *values,int count);voidsetUniformValueArray(int location,const QMatrix4x4 *values,int count);voidsetUniformValueArray(const char*name,const GLfloat *values,int count,int tupleSize);voidsetUniformValueArray(const char*name,const GLint *values,int count);voidsetUniformValueArray(const char*name,const GLuint *values,int count);voidsetUniformValueArray(const char*name,const QVector2D *values,int count);voidsetUniformValueArray(const char*name,const QVector3D *values,int count);voidsetUniformValueArray(const char*name,const QVector4D *values,int count);voidsetUniformValueArray(const char*name,const QMatrix2x2 *values,int count);voidsetUniformValueArray(const char*name,const QMatrix2x3 *values,int count);voidsetUniformValueArray(const char*name,const QMatrix2x4 *values,int count);voidsetUniformValueArray(const char*name,const QMatrix3x2 *values,int count);voidsetUniformValueArray(const char*name,const QMatrix3x3 *values,int count);voidsetUniformValueArray(const char*name,const QMatrix3x4 *values,int count);voidsetUniformValueArray(const char*name,const QMatrix4x2 *values,int count);voidsetUniformValueArray(const char*name,const QMatrix4x3 *values,int count);voidsetUniformValueArray(const char*name,const QMatrix4x4 *values,int count);static boolhasOpenGLShaderPrograms(QOpenGLContext *context =nullptr);private Q_SLOTS:voidshaderDestroyed();private:Q_DISABLE_COPY(QOpenGLShaderProgram)Q_DECLARE_PRIVATE(QOpenGLShaderProgram)boolinit();}; QT_END_NAMESPACE #endif
|