QOpenGLShaderProgram 类
QOpenGLShaderProgram 类允许链接和使用 OpenGL 着色器程序。 更多...
头文件 | #include <QOpenGLShaderProgram> |
CMake | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
qmake | QT += opengl |
继承 | QObject |
- 成员列表,包括继承成员
- QOpenGLShaderProgram 是 3D 渲染的一部分,请参阅 3D 渲染。
公共函数
QOpenGLShaderProgram(QObject *parent = nullptr) | |
virtual | ~QOpenGLShaderProgram() |
bool | addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const char *source) |
bool | addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source) |
bool | addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source) |
bool | addCacheableShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName) |
bool | addShader(QOpenGLShader *shader) |
bool | addShaderFromSourceCode(QOpenGLShader::ShaderType type, const char *source) |
bool | addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source) |
bool | addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source) |
bool | addShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName) |
int | attributeLocation(const char *name) const |
int | attributeLocation(const QByteArray &name) const |
int | attributeLocation(const QString &name) const |
bool | bind() |
void | bindAttributeLocation(const char *name, int location) |
void | bindAttributeLocation(const QByteArray &name, int location) |
void | bindAttributeLocation(const QString &name, int location) |
bool | create() |
QList<float> | defaultInnerTessellationLevels() const |
QList<float> | defaultOuterTessellationLevels() const |
void | disableAttributeArray(int location) |
void | disableAttributeArray(const char *name) |
void | enableAttributeArray(int location) |
void | enableAttributeArray(const char *name) |
bool | isLinked() const |
virtual bool | link() |
QString | log() const |
int | maxGeometryOutputVertices() const |
int | patchVertexCount() const |
GLuint | programId() const |
void | release() |
void | removeAllShaders() |
void | removeShader(QOpenGLShader *shader) |
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) |
void | setAttributeValue(int location, GLfloat value) |
void | setAttributeValue(int location, GLfloat x, GLfloat y) |
void | setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z) |
void | setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) |
void | setAttributeValue(int location, const QVector2D &value) |
void | setAttributeValue(int location, const QVector3D &value) |
void | setAttributeValue(int location, const QVector4D &value) |
void | setAttributeValue(int location, const QColor &value) |
void | setAttributeValue(int location, const GLfloat *values, int columns, int rows) |
void | setAttributeValue(const char *name, GLfloat value) |
void | setAttributeValue(const char *name, GLfloat x, GLfloat y) |
void | setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z) |
void | setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w) |
void | setAttributeValue(const char *name, const QVector2D &value) |
void | setAttributeValue(const char *name, const QVector3D &value) |
void | setAttributeValue(const char *name, const QVector4D &value) |
void | setAttributeValue(const char *name, const QColor &value) |
void | setAttributeValue(const char *name, const GLfloat *values, int columns, int rows) |
void | setDefaultInnerTessellationLevels(const QList<float> &levels) |
void | setDefaultOuterTessellationLevels(const QList<float> &levels) |
void | setPatchVertexCount(int count) |
void | setUniformValue(int location, GLfloat value) |
void | setUniformValue(int location, GLint value) |
void | setUniformValue(const char *name, const QColor &color) |
void | setUniformValue(const char *name, const QPoint &point) |
void | setUniformValue(const char *name, const QPointF &point) |
void | setUniformValue(const char *name, const QSize &size) |
void | setUniformValue(const char *name, const QSizeF &size) |
void | setUniformValue(const char *name, const QMatrix2x2 &value) |
void | setUniformValue(const char *name, const QMatrix2x3 &value) |
void | setUniformValue(const char *name, const QMatrix2x4 &value) |
void | setUniformValue(const char *name, const QMatrix3x2 &value) |
void | setUniformValue(const char *name, const QMatrix3x3 &value) |
void | setUniformValue(const char *name, const QMatrix3x4 &value) |
void | setUniformValue(const char *name, const QMatrix4x2 &value) |
void | setUniformValue(const char *name, const QMatrix4x3 &value) |
void | setUniformValue(const char *name, const QMatrix4x4 &value) |
void | setUniformValue(const char *name, const GLfloat[2][2] value) |
void | setUniformValue(const char *name, const GLfloat[3][3] value) |
void | setUniformValue(const char *name, const GLfloat[4][4] value) |
void | setUniformValue(const char *name, const QTransform &value) |
void | setUniformValue(int location, GLuint value) |
void | setUniformValue(int location, GLfloat x, GLfloat y) |
void | setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z) |
void | setUniformValue(int location, GLfloat x, GLfloat , GLfloat z, GLfloat w) |
void | setUniformValue(int location, const QVector2D &value) |
void | setUniformValue(int location, const QVector3D &value) |
void | setUniformValue(int location, const QVector4D &value) |
void | setUniformValue(int location, const QColor &color) |
void | setUniformValue(int location, const QPoint &point) |
void | setUniformValue(int location, const QPointF &point) |
void | setUniformValue(int location, const QSize &size) |
void | setUniformValue(int location, const QSizeF &size) |
void | setUniformValue(int location, const QMatrix2x2 &value) |
void | setUniformValue(int location, const QMatrix2x3 &value) |
void | setUniformValue(int location, const QMatrix2x4 &value) |
void | setUniformValue(int location, const QMatrix3x2 &value) |
void | setUniformValue(int location, const QMatrix3x3 &value) |
void | setUniformValue(int location, const QMatrix3x4 &value) |
void | setUniformValue(int location, const QMatrix4x2 &value) |
void | setUniformValue(int location, const QMatrix4x3 &value) |
void | setUniformValue(int location, const QMatrix4x4 &value) |
void | setUniformValue(int location, const GLfloat[2][2] value) |
void | setUniformValue(int location, const GLfloat[3][3] value) |
void | setUniformValue(int location, const GLfloat[4][4] value) |
void | setUniformValue(int location, const QTransform &value) |
void | setUniformValue(const char *name, GLfloat value) |
void | setUniformValue(const char *name, GLint value) |
void | setUniformValue(const char *name, GLuint value) |
void | setUniformValue(const char *name, GLfloat x, GLfloat y) |
void | setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z) |
void | setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w) |
void | setUniformValue(const char *name, const QVector2D &value) |
void | setUniformValue(const char *name, const QVector3D &value) |
void | setUniformValue(const char *name, const QVector4D &value) |
void | setUniformValueArray(int location, const GLfloat *values, int count, int tupleSize) |
void | setUniformValueArray(int location, const GLint *values, int count) |
void | setUniformValueArray(int location, const GLuint *values, int count) |
void | setUniformValueArray(int location, const QVector2D *values, int count) |
void | setUniformValueArray(int location, const QVector3D *values, int count) |
void | setUniformValueArray(int location, const QVector4D *values, int count) |
void | setUniformValueArray(int location, const QMatrix2x2 *values, int count) |
void | setUniformValueArray(int location, const QMatrix2x3 *values, int count) |
void | setUniformValueArray(int location, const QMatrix2x4 *values, int count) |
void | setUniformValueArray(int location, const QMatrix3x2 *values, int count) |
void | setUniformValueArray(int location, const QMatrix3x3 *values, int count) |
void | setUniformValueArray(int location, const QMatrix3x4 *values, int count) |
void | setUniformValueArray(int location, const QMatrix4x2 *values, int count) |
void | setUniformValueArray(int location, const QMatrix4x3 *values, int count) |
void | setUniformValueArray(int location, const QMatrix4x4 *values, int count) |
void | setUniformValueArray(const char *name, const GLfloat *values, int count, int tupleSize) |
void | setUniformValueArray(const char *name, const GLint *values, int count) |
void | setUniformValueArray(const char *name, const GLuint *values, int count) |
void | setUniformValueArray(const char *name, const QVector2D *values, int count) |
void | setUniformValueArray(const char *name, const QVector3D *values, int count) |
void | setUniformValueArray(const char *name, const QVector4D *values, int count) |
void | setUniformValueArray(const char *name, const QMatrix2x2 *values, int count) |
void | setUniformValueArray(const char *name, const QMatrix2x3 *values, int count) |
void | setUniformValueArray(const char *name, const QMatrix2x4 *values, int count) |
void | setUniformValueArray(const char *name, const QMatrix3x2 *values, int count) |
void | setUniformValueArray(const char *name, const QMatrix3x3 *values, int count) |
void | setUniformValueArray(const char *name, const QMatrix3x4 *values, int count) |
void | setUniformValueArray(const char *name, const QMatrix4x2 *values, int count) |
void | setUniformValueArray(const char *name, const QMatrix4x3 *values, int count) |
void | setUniformValueArray(const char *name, const QMatrix4x4 *values, int count) |
QList<QOpenGLShader *> | shaders() const |
int | uniformLocation(const char *name) const |
int | uniformLocation(const QByteArray &name) const |
int | uniformLocation(const QString &name) const |
静态公共成员
bool | hasOpenGLShaderPrograms(QOpenGLContext *context = nullptr) |
详细描述
简介
此类支持使用OpenGL着色语言(GLSL)和OpenGL/ES着色语言(GLSL/ES)编写的着色程序。
QOpenGLShader和QOpenGLShaderProgram保护程序员免受顶点和片段着色器编译和链接的细节。
以下示例使用提供的源代码创建了一个顶点着色器程序。编译和链接后,通过调用QOpenGLShaderProgram::bind()在当前QOpenGLContext中激活着色器程序。
QOpenGLShader shader(QOpenGLShader::Vertex); shader.compileSourceCode(code); QOpenGLShaderProgram program(context); program.addShader(&shader); program.link(); program.bind();
编写可移植着色器
由于对标准顶点属性和统一变量的支持程度不同,着色器程序在OpenGL实现之间很难重用。特别是,GLSL/ES缺少桌面OpenGL系统中存在的所有标准变量:如gl_Vertex
、gl_Normal
、gl_Color
等。桌面OpenGL缺少变量限定符highp
、mediump
和lowp
。
QOpenGLShaderProgram类通过在桌面OpenGL上给所有着色器程序添加以下行来简化编写可移植着色器的过程
#define highp #define mediump #define lowp
这使得在桌面系统上运行大多数GLSL/ES着色器程序成为可能。程序员应该只使用GLSL/ES中存在的功能,并避免仅在桌面系统上工作的标准变量名称。
简单着色器示例
program.addShaderFromSourceCode(QOpenGLShader::Vertex, "attribute highp vec4 vertex;\n" "uniform highp mat4 matrix;\n" "void main(void)\n" "{\n" " gl_Position = matrix * vertex;\n" "}"); program.addShaderFromSourceCode(QOpenGLShader::Fragment, "uniform mediump vec4 color;\n" "void main(void)\n" "{\n" " gl_FragColor = color;\n" "}"); program.link(); program.bind(); int vertexLocation = program.attributeLocation("vertex"); int matrixLocation = program.uniformLocation("matrix"); int colorLocation = program.uniformLocation("color");
在上述着色器程序激活的状态下,我们可以按以下方式绘制一个绿色三角形
static GLfloat const triangleVertices[] = { 60.0f, 10.0f, 0.0f, 110.0f, 110.0f, 0.0f, 10.0f, 110.0f, 0.0f }; QColor color(0, 255, 0, 255); QMatrix4x4 pmvMatrix; pmvMatrix.ortho(rect()); program.enableAttributeArray(vertexLocation); program.setAttributeArray(vertexLocation, triangleVertices, 3); program.setUniformValue(matrixLocation, pmvMatrix); program.setUniformValue(colorLocation, color); glDrawArrays(GL_TRIANGLES, 0, 3); program.disableAttributeArray(vertexLocation);
二进制着色器和程序
可以使用glShaderBinary()
在QOpenGLShader::shaderId返回值上指定二进制着色器。然后可以将包含二进制的QOpenGLShader实例添加到着色器程序中,并用link()以通常方式链接。
可以使用glProgramBinaryOES()
在programId返回值上指定二进制程序。然后应用程序应调用link(),这将注意到程序已被指定和链接,从而使其他操作可以在着色器程序上执行。着色器程序ID可以使用create()函数显式创建。
缓存程序二进制
从Qt 5.9开始,内置了对磁盘上缓存程序二进制的支持。要启用此功能,切换到使用addCacheableShaderFromSourceCode()和addCacheableShaderFromSourceFile。在有OpenGL ES 3.x上下文或对GL_ARB_get_program_binary
的支持的情况下,这将在QStandardPaths::GenericCacheLocation或QStandardPaths::CacheLocation下透明地缓存程序二进制。如果不存在支持,调用缓存函数的变体与正常函数等效。
注意:有些驱动程序即使宣传了扩展或提供了OpenGL ES 3.0,也没有任何二进制格式可用。在这种情况下,将禁用程序二进制支持。
另请参阅:QOpenGLShader。
成员函数文档
[显式]
QOpenGLShaderProgram::QOpenGLShaderProgram(QObject *parent = nullptr)
构造一个新的着色器程序并将其附加到parent。该程序在调用addShader()之前将是无效的。
着色器程序将与当前QOpenGLContext关联。
另请参阅 addShader。
[虚拟 noexcept]
QOpenGLShaderProgram::~QOpenGLShaderProgram()
删除此着色程序。
bool QOpenGLShaderProgram::addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const char *source)
将指定类型和源代码的着色器注册到此程序。与addShaderFromSourceCode不同,此函数不执行编译。编译被推迟到link,并且可能根本不会发生,因为link可能会潜在地使用来自Qt着色器磁盘缓存的程序二进制文件。这通常会导致性能显著提升。
如果着色器已注册或在没有缓存的情况下编译成功,则返回true;如果发生错误,则返回false。可以通过log检索编译错误消息。
当禁用磁盘缓存时,例如通过Qt::AA_DisableShaderDiskCache,或OpenGL上下文不支持上下文二进制文件时,调用此函数与addShaderFromSourceCode等效。
另请参阅 addShaderFromSourceCode 和 addCacheableShaderFromSourceFile。
bool QOpenGLShaderProgram::addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source)
这是重载函数。
将指定类型和源代码的着色器注册到此程序。与addShaderFromSourceCode不同,此函数不执行编译。编译被推迟到link,并且可能根本不会发生,因为link可能会潜在地使用来自Qt着色器磁盘缓存的程序二进制文件。这通常会导致性能显著提升。
如果着色器已注册或在没有缓存的情况下编译成功,则返回true;如果发生错误,则返回false。可以通过log检索编译错误消息。
当禁用磁盘缓存时,例如通过Qt::AA_DisableShaderDiskCache,或OpenGL上下文不支持上下文二进制文件时,调用此函数与addShaderFromSourceCode等效。
另请参阅 addShaderFromSourceCode 和 addCacheableShaderFromSourceFile。
bool QOpenGLShaderProgram::addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source)
这是重载函数。
将指定类型和源代码的着色器注册到此程序。与addShaderFromSourceCode不同,此函数不执行编译。编译被推迟到link,并且可能根本不会发生,因为link可能会潜在地使用来自Qt着色器磁盘缓存的程序二进制文件。这通常会导致性能显著提升。
当禁用磁盘缓存时,例如通过Qt::AA_DisableShaderDiskCache,或OpenGL上下文不支持上下文二进制文件时,调用此函数与addShaderFromSourceCode等效。
另请参阅 addShaderFromSourceCode 和 addCacheableShaderFromSourceFile。
bool QOpenGLShaderProgram::addCacheableShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName)
将指定类型和文件名的着色器注册到此程序。与addShaderFromSourceFile不同,此函数不执行编译。编译被推迟到link,并且可能根本不会发生,因为link可能会潜在地使用来自Qt着色器磁盘缓存的程序二进制文件。这通常会导致性能显著提升。
如果文件已成功读取或编译成功,则返回true;如果无法打开文件或着色器编译失败,则返回false。可以通过log检索编译错误消息。
当禁用磁盘缓存时,例如通过Qt::AA_DisableShaderDiskCache,或OpenGL上下文不支持上下文二进制文件时,调用此函数与addShaderFromSourceFile等效。
另请参阅 addShaderFromSourceFile 和 addCacheableShaderFromSourceCode。
bool QOpenGLShaderProgram::addShader(QOpenGLShader *shader)
将编译的 着色器 添加到这个着色器程序中。如果着色器可以添加,则返回 true
,否则返回 false。
着色器 对象的所有权仍然属于调用者。当删除此 QOpenGLShaderProgram 实例时不会删除它。这允许调用者将相同的着色器添加到多个着色器程序中。
参见addShaderFromSourceCode(),addShaderFromSourceFile(),removeShader(),link(),和 removeAllShaders()。
bool QOpenGLShaderProgram::addShaderFromSourceCode(QOpenGLShader::ShaderType type, const char *source)
将 源代码 编译成指定 类型 的着色器,并将其添加到这个着色器程序中。如果编译成功,则返回 true
,否则返回 false。编译错误和警告将通过 log() 提供。
此函数旨在简化将顶点和片段着色器快速添加到着色器程序中,而不必首先创建 QOpenGLShader 实例的过程。
参见addShader(),addShaderFromSourceFile(),removeShader(),link(),log(),和 removeAllShaders()。
bool QOpenGLShaderProgram::addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source)
这是重载函数。
将 源代码 编译成指定 类型 的着色器,并将其添加到这个着色器程序中。如果编译成功,则返回 true
,否则返回 false。编译错误和警告将通过 log() 提供。
此函数旨在简化将顶点和片段着色器快速添加到着色器程序中,而不必首先创建 QOpenGLShader 实例的过程。
参见addShader(),addShaderFromSourceFile(),removeShader(),link(),log(),和 removeAllShaders()。
bool QOpenGLShaderProgram::addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source)
这是重载函数。
将 源代码 编译成指定 类型 的着色器,并将其添加到这个着色器程序中。如果编译成功,则返回 true
,否则返回 false。编译错误和警告将通过 log() 提供。
此函数旨在简化将顶点和片段着色器快速添加到着色器程序中,而不必首先创建 QOpenGLShader 实例的过程。
参见addShader(),addShaderFromSourceFile(),removeShader(),link(),log(),和 removeAllShaders()。
bool QOpenGLShaderProgram::addShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName)
将 文件名 中的内容编译成指定 类型 的着色器,并将其添加到这个着色器程序中。如果编译成功,则返回 true
,否则返回 false。编译错误和警告将通过 log() 提供。
此函数旨在简化将顶点和片段着色器快速添加到着色器程序中,而不必首先创建 QOpenGLShader 实例的过程。
参见addShader() 和 addShaderFromSourceCode()。
int QOpenGLShaderProgram::attributeLocation(const char *name) const
返回 名称 在此着色器程序参数列表中的位置。如果 名称 不是此着色器程序的合法属性,则返回 -1。
参见uniformLocation() 和 bindAttributeLocation()。
int QOpenGLShaderProgram::attributeLocation(const QByteArray &name) const
这是重载函数。
返回 名称 在此着色器程序参数列表中的位置。如果 名称 不是此着色器程序的合法属性,则返回 -1。
参见uniformLocation() 和 bindAttributeLocation()。
int QOpenGLShaderProgram::attributeLocation(const QString &name) const
这是重载函数。
返回 名称 在此着色器程序参数列表中的位置。如果 名称 不是此着色器程序的合法属性,则返回 -1。
参见uniformLocation() 和 bindAttributeLocation()。
bool QOpenGLShaderProgram::bind()
将此着色器程序绑定到活动 QOpenGLContext 并使其成为当前着色器程序。之前绑定的着色器程序将被释放。这相当于在 programId() 上调用 glUseProgram()
。如果程序成功绑定,则返回 true
;否则返回 false。如果着色器程序尚未链接或需要重新链接,此函数将调用 link。
void QOpenGLShaderProgram::bindAttributeLocation(const char *name, int location)
将属性 name 绑定到指定的 location。此函数可以在程序链接之前或之后调用。程序链接时未明确绑定的任何属性将自动分配位置。
在调用此函数后,程序将需要重新链接才能使更改生效。
另请参阅attributeLocation。
void QOpenGLShaderProgram::bindAttributeLocation(const QByteArray &name, int location)
这是重载函数。
将属性 name 绑定到指定的 location。此函数可以在程序链接之前或之后调用。程序链接时未明确绑定的任何属性将自动分配位置。
在调用此函数后,程序将需要重新链接才能使更改生效。
另请参阅attributeLocation。
void QOpenGLShaderProgram::bindAttributeLocation(const QString &name, int location)
这是重载函数。
将属性 name 绑定到指定的 location。此函数可以在程序链接之前或之后调用。程序链接时未明确绑定的任何属性将自动分配位置。
在调用此函数后,程序将需要重新链接才能使更改生效。
另请参阅attributeLocation。
bool QOpenGLShaderProgram::create()
请求立即创建着色器程序的字段。如果成功,则返回 true
;否则返回 false
。
此函数主要用于将 QOpenGLShaderProgram 与其他直接操作着色器程序字段的 OpenGL 函数结合使用,例如 GL_OES_get_program_binary
。
当通常使用着色器程序时,着色器程序的 ID 将按需创建。
另请参阅programId。
QList<float> QOpenGLShaderProgram::defaultInnerTessellationLevels() const
返回默认的内部细分级别,以便在细分控制着色器未输出它们的情况下,由细分原语生成器使用。有关OpenGL和细分着色器的更多详细信息,请参阅 OpenGL细分着色器。
返回一个包含描述内部细分级别的浮点数的QList。向量将始终有两个元素,但不是所有元素对每个细分模式都有效。
注意:这返回全局OpenGL状态值。它不特定于此 QOpenGLShaderProgram 实例。
注意:此功能仅支持OpenGL >= 4.0,并且在使用OpenGL ES 3.2时不会返回有效结果。
另请参阅 setDefaultInnerTessellationLevels() 和 defaultOuterTessellationLevels.
QList<float> QOpenGLShaderProgram::defaultOuterTessellationLevels() const
返回默认的外部细分级别,由细分控制着色器在未输出它们时使用的细分原语生成器。有关OpenGL和细分着色器的更多详细信息,请参阅OpenGL细分着色器。
返回一个描述外部细分级别的浮点数QList。该向量始终具有四个元素,但并非所有元素都对每种细分模式都有意义。
注意:这返回全局OpenGL状态值。它不特定于此 QOpenGLShaderProgram 实例。
注意:此功能仅支持OpenGL >= 4.0,并且在使用OpenGL ES 3.2时不会返回有效结果。
另请参阅 setDefaultOuterTessellationLevels() 和 defaultInnerTessellationLevels.
void QOpenGLShaderProgram::disableAttributeArray(int location)
禁用之前通过调用enableAttributeArray() 启用的此着色程序中的顶点数组 location。
另请参阅 enableAttributeArray()、setAttributeArray()、setAttributeValue() 和 setUniformValue()。
void QOpenGLShaderProgram::disableAttributeArray(const char *name)
这是重载函数。
禁用之前通过调用enableAttributeArray() 启用的此着色程序中名为 name 的顶点数组。
另请参阅 enableAttributeArray()、setAttributeArray()、setAttributeValue() 和 setUniformValue()。
void QOpenGLShaderProgram::enableAttributeArray(int location)
在此着色程序中启用位于 location 的顶点数组,以便使用 location 上的 setAttributeArray() 设置的值。
另请参阅 disableAttributeArray()、setAttributeArray()、setAttributeValue() 和 setUniformValue()。
void QOpenGLShaderProgram::enableAttributeArray(const char *name)
这是重载函数。
在此着色程序中启用名为 name 的顶点数组,以便使用 name 上的 setAttributeArray() 设置的值。
另请参阅 disableAttributeArray()、setAttributeArray()、setAttributeValue() 和 setUniformValue()。
[静态]
bool QOpenGLShaderProgram::hasOpenGLShaderPrograms(QOpenGLContext *context = nullptr)
如果系统支持OpenGL着色语言(GLSL)编写的着色程序,则返回 true
;否则返回 false
。
使用 context 来解析GLSL扩展。如果 context 是 nullptr
,则使用 QOpenGLContext::currentContext()。
bool QOpenGLShaderProgram::isLinked() const
如果此着色程序已经链接,则返回 true
;否则返回 false
。
另请参阅 link()。
[虚拟]
bool QOpenGLShaderProgram::link()
使用 addShader() 组合添加到本程序中的着色器。如果链接成功则返回 true
,否则返回 false
。如果链接失败,可以通过 log() 获取错误信息。
子类可以重写此函数以初始化特定着色器程序使用的属性和统一变量。
如果着色器程序已经被链接,再次调用此函数将强制重新链接。
当通过 addCacheableShaderFromSourceCode() 或 addCacheableShaderFromSourceFile() 将着色器添加到此程序时,支持程序二进制,磁盘上可用缓存二进制。此时将跳过实际的编译和链接过程,而是通过 glProgramBinary() 初始化程序。如果没有程序的缓存版本或它是使用不同版本的驱动程序生成的,则将从源编译着色器,并以正常方式链接程序。这允许无缝升级图形驱动程序,无需担心可能不兼容的二进制格式。
QString QOpenGLShaderProgram::log() const
返回在上次 link() 或 addShader() 操作(操作时显式指定了源代码)中发生的错误和警告。
另请参阅 link()。
int QOpenGLShaderProgram::maxGeometryOutputVertices() const
返回几何着色器可以输出的顶点数量的硬件限制。
int QOpenGLShaderProgram::patchVertexCount() const
返回渲染时每个补丁使用的顶点数。
注意:这返回全局OpenGL状态值。它不特定于此 QOpenGLShaderProgram 实例。
另请参阅setPatchVertexCount。
GLuint QOpenGLShaderProgram::programId() const
返回与该着色器程序关联的 OpenGL 标识符。
void QOpenGLShaderProgram::release()
释放当前 QOpenGLContext 中的活动着色器程序。这相当于调用 glUseProgram(0)
。
另请参阅bind。
void QOpenGLShaderProgram::removeAllShaders()
删除之前添加到本程序的所有着色器。如果这些着色器是从外部构造的,那么对应的 QOpenGLShader 对象不会被删除。由 QOpenGLShaderProgram 内部构造的 QOpenGLShader 对象将被删除。
另请参阅addShader() 和 removeShader。
void QOpenGLShaderProgram::removeShader(QOpenGLShader *shader)
从着色器程序中移除 shader。对该对象不进行删除操作。
着色程序必须在当前 QOpenGLContext 中有效。
另见 addShader(),link() 和 removeAllShaders()。
void QOpenGLShaderProgram::setAttributeArray(int location,const GLfloat *values,int tupleSize,int stride = 0)
在此着色程序中设置位于 location 的属性上的顶点值数组。`tupleSize` 指示每个顶点的组件数(1,2,3 或 4),而 `stride` 指示顶点之间的字节数。默认的 `stride` 值为零表示 values 中的顶点密集排列。
当在 location 上调用 enableAttributeArray() 时,数组将变为活动状态。否则将使用 setAttributeValue() 为 location 指定的值。
另见 setAttributeValue(),setUniformValue(),enableAttributeArray() 和 disableAttributeArray()。
void QOpenGLShaderProgram::setAttributeArray(int location,const QVector2D *values,int stride = 0)
在此着色程序中设置位于 location 的属性上的 2D 顶点值数组。`stride` 指示顶点之间的字节数。默认的 `stride` 值为零表示 values 中的顶点密集排列。
当在 location 上调用 enableAttributeArray() 时,数组将变为活动状态。否则将使用 setAttributeValue() 为 location 指定的值。
另见 setAttributeValue(),setUniformValue(),enableAttributeArray() 和 disableAttributeArray()。
void QOpenGLShaderProgram::setAttributeArray(int location,const QVector3D *values,int stride = 0)
在此着色程序中设置位于 location 的属性上的 3D 顶点值数组。`stride` 指示顶点之间的字节数。默认的 `stride` 值为零表示 values 中的顶点密集排列。
当在 location 上调用 enableAttributeArray() 时,数组将变为活动状态。否则将使用 setAttributeValue() 为 location 指定的值。
另见 setAttributeValue(),setUniformValue(),enableAttributeArray() 和 disableAttributeArray()。
void QOpenGLShaderProgram::setAttributeArray(int location,const QVector4D *values,int stride = 0)
在此着色程序中设置位于 location 的属性上的 4D 顶点值数组。`stride` 指示顶点之间的字节数。默认的 `stride` 值为零表示 values 中的顶点密集排列。
当在 location 上调用 enableAttributeArray() 时,数组将变为活动状态。否则将使用 setAttributeValue() 为 location 指定的值。
另见 setAttributeValue(),setUniformValue(),enableAttributeArray() 和 disableAttributeArray()。
void QOpenGLShaderProgram::setAttributeArray(int location,GLenum type,const void *values,int tupleSize,int stride = 0)
在此着色程序中设置位于 location 的属性上的顶点值数组。`stride` 指示顶点之间的字节数。默认的 `stride` 值为零表示 values 中的顶点密集排列。
`type` 指示 values 数组中元素的类型,通常是 GL_FLOAT
,GL_UNSIGNED_BYTE
等。`tupleSize` 指示每个顶点的组件数:1,2,3 或 4。
当在 location 上调用 enableAttributeArray() 时,数组将变为活动状态。否则将使用 setAttributeValue() 为 location 指定的值。
可以使用 setAttributeBuffer() 函数将属性数组设置到一个顶点缓冲区的偏移量处。
注意: 将启用归一化。如果不希望这样做,请通过 QOpenGLFunctions 直接调用 glVertexAttribPointer。
参见 setAttributeValue(),setUniformValue(),enableAttributeArray(),disableAttributeArray(),和 setAttributeBuffer。
void QOpenGLShaderProgram::setAttributeArray(const char *name, const GLfloat *values, int tupleSize, int stride = 0)
这是重载函数。
在此着色程序中设置名为 name 的属性上的顶点 values 数组。 tupleSize 表示每个顶点的组件数(1、2、3 或 4),而 stride 表示顶点之间的字节数。默认的 stride 值为零表示顶点在 values 中紧密打包。
在调用 name 上的 enableAttributeArray() 时,该数组将变为活动状态。否则,将使用 setAttributeValue() 为 name 指定的值。
另见 setAttributeValue(),setUniformValue(),enableAttributeArray() 和 disableAttributeArray()。
void QOpenGLShaderProgram::setAttributeArray(const char *name, const QVector2D *values, int stride = 0)
这是重载函数。
在此着色程序中设置名为 name 的属性上的 2D 顶点 values 数组。 stride 表示顶点之间的字节数。默认的 stride 值为零表示顶点在 values 中紧密打包。
在调用 name 上的 enableAttributeArray() 时,该数组将变为活动状态。否则,将使用 setAttributeValue() 为 name 指定的值。
另见 setAttributeValue(),setUniformValue(),enableAttributeArray() 和 disableAttributeArray()。
void QOpenGLShaderProgram::setAttributeArray(const char *name, const QVector3D *values, int stride = 0)
这是重载函数。
在此着色程序中设置名为 name 的属性上的 3D 顶点 values 数组。 stride 表示顶点之间的字节数。默认的 stride 值为零表示顶点在 values 中紧密打包。
在调用 name 上的 enableAttributeArray() 时,该数组将变为活动状态。否则,将使用 setAttributeValue() 为 name 指定的值。
另见 setAttributeValue(),setUniformValue(),enableAttributeArray() 和 disableAttributeArray()。
void QOpenGLShaderProgram::setAttributeArray(const char *name, const QVector4D *values, int stride = 0)
这是重载函数。
在此着色程序中设置名为 name 的属性上的 4D 顶点 values 数组。 stride 表示顶点之间的字节数。默认的 stride 值为零表示顶点在 values 中紧密打包。
在调用 name 上的 enableAttributeArray() 时,该数组将变为活动状态。否则,将使用 setAttributeValue() 为 name 指定的值。
另见 setAttributeValue(),setUniformValue(),enableAttributeArray() 和 disableAttributeArray()。
void QOpenGLShaderProgram::setAttributeArray(const char *name, GLenum type, const void *values, int tupleSize, int stride = 0)
这是重载函数。
在此着色程序中设置名为 name 的属性上的顶点 values 数组。 stride 表示顶点之间的字节数。默认的 stride 值为零表示顶点在 values 中紧密打包。
`type` 指示 values 数组中元素的类型,通常是 GL_FLOAT
,GL_UNSIGNED_BYTE
等。`tupleSize` 指示每个顶点的组件数:1,2,3 或 4。
当在 name 上调用 enableAttributeArray() 函数时,数组将变为活动状态。否则将使用通过 setAttributeValue() 在 name 中指定的值。
可以使用 setAttributeBuffer() 函数将属性数组设置到一个顶点缓冲区的偏移量处。
参见 setAttributeValue(),setUniformValue(),enableAttributeArray(),disableAttributeArray(),和 setAttributeBuffer。
void QOpenGLShaderProgram::setAttributeBuffer(int location, GLenum type, int offset, int tupleSize, int stride = 0)
在此着色程序中,为位置为 location 的属性设置顶点值数组,从当前绑定顶点缓冲区中的特定 offset 开始。 stride 表示顶点之间的字节数。默认的 stride 值为零表示顶点在值数组中紧密 packing。
type 表示顶点值数组中元素的类型,通常是 GL_FLOAT
、GL_UNSIGNED_BYTE
等。 tupleSize 表示每个顶点的组件数:1、2、3 或 4。
当在 location 上调用 enableAttributeArray() 时,数组将变为活动状态。否则将使用 setAttributeValue() 为 location 指定的值。
注意: 将启用归一化。如果不希望这样做,请通过 QOpenGLFunctions 直接调用 glVertexAttribPointer。
另请参阅setAttributeArray。
void QOpenGLShaderProgram::setAttributeBuffer(const char *name, GLenum type, int offset, int tupleSize, int stride = 0)
这是重载函数。
在此着色程序中,为名为 name 的属性设置顶点值数组,从当前绑定顶点缓冲区中的特定 offset 开始。 stride 表示顶点之间的字节数。默认的 stride 值为零表示顶点在值数组中紧密 packing。
type 表示顶点值数组中元素的类型,通常是 GL_FLOAT
、GL_UNSIGNED_BYTE
等。 tupleSize 表示每个顶点的组件数:1、2、3 或 4。
当在 name 上调用 enableAttributeArray() 函数时,数组将变为活动状态。否则将使用通过 setAttributeValue() 在 name 中指定的值。
另请参阅setAttributeArray。
void QOpenGLShaderProgram::setAttributeValue(int location, GLfloat value)
将当前上下文中的 location 属性设置为 value。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(int location, GLfloat x, GLfloat y)
将当前上下文中的 location 属性设置为 2D 向量 (x, y)。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z)
将当前上下文中的 location 属性设置为 3D 向量 (x, y, z)。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
将当前上下文中的 location 属性设置为 4D 向量 (x, y, z, w)。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(int location, const QVector2D &value)
将当前上下文中的 location 属性设置为 value。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(int location, const QVector3D &value)
将当前上下文中的 location 属性设置为 value。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(int location, const QVector4D &value)
将当前上下文中的 location 属性设置为 value。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(int location, const QColor &value)
将当前上下文中的 location 属性设置为 value。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(int location, const GLfloat *values, int columns, int rows)
在当前上下文中设置位于 location 处的属性为 values 的内容,其中包含 columns 个元素,每个元素由 rows 个元素组成。rows 的值应为 1、2、3 或 4。此函数通常用于设置矩阵值和列向量。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat value)
这是重载函数。
在当前上下文中设置名为 name 的属性为 value。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat x, GLfloat y)
这是重载函数。
在当前上下文中设置名为 name 的属性为 2D 向量 (x, y)。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z)
这是重载函数。
在当前上下文中设置名为 name 的属性为 3D 向量 (x, y, z)。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
这是重载函数。
在当前上下文中设置名为 name 的属性为 4D 向量 (x, y, z, w)。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(const char *name, const QVector2D &value)
这是重载函数。
在当前上下文中设置名为 name 的属性为 value。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(const char *name, const QVector3D &value)
这是重载函数。
在当前上下文中设置名为 name 的属性为 value。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(const char *name, const QVector4D &value)
这是重载函数。
在当前上下文中设置名为 name 的属性为 value。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(const char *name, const QColor &value)
这是重载函数。
在当前上下文中设置名为 name 的属性为 value。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setAttributeValue(const char *name, const GLfloat *values, int columns, int rows)
这是重载函数。
将当前上下文中的属性 name 设置为 values 的内容,其中包含 columns 元素,每个元素由 rows 元素组成。 The rows 的值应为 1, 2, 3 或 4。此函数通常用于设置矩阵值和列向量。
另请参阅setUniformValue。
void QOpenGLShaderProgram::setDefaultInnerTessellationLevels(const QList<float> &levels)
设置默认的外部细分级别,供细分原语生成器使用,如果细分控制着色器未将它们输出到 levels。有关OpenGL和细分着色器的更多详细信息,请参见OpenGL细分着色器。
参数 levels 应该是一个包含2个浮点数的 QList。并非所有值都适用于所有细分模式。如果您指定了一个元素少于2个的向量,则剩余的元素将被赋予默认值1。
注意:这修改了全局OpenGL状态,并不特定于此 QOpenGLShaderProgram 实例。您应该在渲染函数中需要时调用此函数,因为 QOpenGLShaderProgram 不会为您应用此设置。这是一个纯粹的便利函数。
注意:此函数仅适用于OpenGL >= 4.0,并在OpenGL ES 3.2中不受支持。
另请参阅:defaultInnerTessellationLevels() 和 setDefaultOuterTessellationLevels()。
void QOpenGLShaderProgram::setDefaultOuterTessellationLevels(const QList<float> &levels)
设置默认的外部细分级别,供细分原语生成器使用,如果细分控制着色器未将它们输出到 levels。有关OpenGL和细分着色器的更多详细信息,请参见OpenGL细分着色器。
levels 参数应该是一个包含4个浮点数的 QList。并非所有值都适用于所有细分模式。如果您指定了一个元素少于4个的向量,则剩余的元素将被赋予默认值1。
注意:这修改了全局OpenGL状态,并不特定于此 QOpenGLShaderProgram 实例。您应该在渲染函数中需要时调用此函数,因为 QOpenGLShaderProgram 不会为您应用此设置。这是一个纯粹的便利函数。
注意:此函数仅适用于OpenGL >= 4.0,并在OpenGL ES 3.2中不受支持。
另请参阅:defaultOuterTessellationLevels() 和 setDefaultInnerTessellationLevels()。
void QOpenGLShaderProgram::setPatchVertexCount(int count)
使用此函数指定OpenGL中使用到的补丁顶点的数量 count。补丁是一种自定义OpenGL原语,其解释完全由细分着色器阶段定义。因此,仅在包含细分阶段着色器的 QOpenGLShaderProgram 中调用此函数才有意义。在OpenGL细分中,只能使用 glDraw*()
函数渲染的原始类型是 GL_PATCHES
。
这相当于调用 glPatchParameteri(GL_PATCH_VERTICES, count)。
注意:这修改了全局OpenGL状态,并不特定于此 QOpenGLShaderProgram 实例。您应该在渲染函数中需要时调用此函数,因为 QOpenGLShaderProgram 不会为您应用此设置。这是一个纯粹的便利函数。
另请参阅:patchVertexCount()。
void QOpenGLShaderProgram::setUniformValue(int location, GLfloat value)
将当前上下文中的统一变量设置 location 为 value。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, GLint value)
将当前上下文中的统一变量设置 location 为 value。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QColor &color)
这是重载函数。
将当前上下文中名为name的统一变量设置为color的红、绿、蓝和alpha分量。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QPoint &point)
这是重载函数。
将当前上下文中与name相关联的统一变量设置为point的x和y坐标。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QPointF &point)
这是重载函数。
将当前上下文中与name相关联的统一变量设置为point的x和y坐标。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QSize &size)
这是重载函数。
将当前上下文中与name相关联的统一变量设置为给定size的宽度和高度。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QSizeF &size)
这是重载函数。
将当前上下文中与name相关联的统一变量设置为给定size的宽度和高度。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix2x2 &value)
这是重载函数。
将当前上下文中名为name的统一变量设置为2x2矩阵value。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix2x3 &value)
这是重载函数。
将当前上下文中名为name的统一变量设置为2x3矩阵value。
注意:该函数不支持非方形矩阵,例如在现代OpenGL版本中存在的mat2x3类型,相反,它将统一变量当作vec3数组处理。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix2x4 &value)
这是重载函数。
将当前上下文中名为name的统一变量设置为2x4矩阵value。
注意:该函数不支持非方形矩阵,例如在现代OpenGL版本中存在的mat2x4类型,相反,它将统一变量当作vec4数组处理。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix3x2 &value)
这是重载函数。
将当前上下文中名为name的统一变量设置为3x2矩阵value。
注意:该函数不支持非方形矩阵,例如在现代OpenGL版本中存在的mat3x2类型,相反,它将统一变量当作vec2数组处理。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix3x3 &value)
这是重载函数。
将当前上下文中名为name的统一变量设置为3x3矩阵value。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix3x4 &value)
这是重载函数。
将当前上下文中的统一变量 name 设置为3x4矩阵 value。
注意:此函数不支持非方形矩阵,即现代OpenGL版本中存在的类似mat3x4的GLSL类型。相反,它将统一变量视为vec4数组。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix4x2 &value)
这是重载函数。
将当前上下文中的统一变量 name 设置为4x2矩阵 value。
注意:此函数不支持非方形矩阵,即现代OpenGL版本中存在的类似mat4x2的GLSL类型。相反,它将统一变量视为vec2数组。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix4x3 &value)
这是重载函数。
将当前上下文中的统一变量 name 设置为4x3矩阵 value。
注意:此函数不支持非方形矩阵,即现代OpenGL版本中存在的类似mat4x3的GLSL类型。相反,它将统一变量视为vec3数组。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QMatrix4x4 &value)
这是重载函数。
将当前上下文中的统一变量 name 设置为4x4矩阵 value。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const GLfloat[2][2] value)
这是重载函数。
将当前上下文中的统一变量 name 设置为2x2矩阵 value。矩阵元素必须按列主序指定。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const GLfloat[3][3] value)
这是重载函数。
将当前上下文中的统一变量 name 设置为3x3矩阵 value。矩阵元素必须按列主序指定。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const GLfloat[4][4] value)
这是重载函数。
将当前上下文中的统一变量 name 设置为4x4矩阵 value。矩阵元素必须按列主序指定。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QTransform &value)
这是重载函数。
将当前上下文中的统一变量 name 设置为作为 QTransform 值指定的3x3变换矩阵 value。
要将 QTransform 的值作为一个 4x4 矩阵在着色器中设置,请使用 setUniformValue(name, QMatrix4x4(value))
。
void QOpenGLShaderProgram::setUniformValue(int location, GLuint value)
将当前上下文中的 location 位置的统一变量设置为 value。这个函数用于设置采样器的值。
注意:此函数不了解现代 OpenGL 版本中的无符号整型支持,因此将 value 作为 GLint 处理,并调用 glUniform1i。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, GLfloat x, GLfloat y)
将当前上下文中的 location 位置的统一变量设置为 2D 向量(x, y)。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z)
将当前上下文中的 location 位置的统一变量设置为 3D 向量(x, y, z)。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
将当前上下文中的 location 位置的统一变量设置为 4D 向量(x, y, z, w)。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QVector2D &value)
将当前上下文中的统一变量设置 location 为 value。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QVector3D &value)
将当前上下文中的统一变量设置 location 为 value。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QVector4D &value)
将当前上下文中的统一变量设置 location 为 value。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QColor &color)
将当前上下文中的 location 位置的统一变量设置为颜色 color 的红色、绿色、蓝色和 alpha 分量。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QPoint &point)
将当前上下文中的 location 位置的统一变量设置为点 point 的 x 和 y 坐标。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QPointF &point)
将当前上下文中的 location 位置的统一变量设置为点 point 的 x 和 y 坐标。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QSize &size)
将当前上下文中位置的统一变量设置为给定尺寸的宽度和高度。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QSizeF &size)
将当前上下文中位置的统一变量设置为给定尺寸的宽度和高度。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix2x2 &value)
将当前上下文中位置的统一变量设置为2x2矩阵值。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix2x3 &value)
将当前上下文中位置的统一变量设置为2x3矩阵值。
注意:该函数不支持非方形矩阵,例如在现代OpenGL版本中存在的mat2x3类型,相反,它将统一变量当作vec3数组处理。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix2x4 &value)
将当前上下文中位置的统一变量设置为2x4矩阵值。
注意:该函数不支持非方形矩阵,例如在现代OpenGL版本中存在的mat2x4类型,相反,它将统一变量当作vec4数组处理。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix3x2 &value)
将当前上下文中位置的统一变量设置为3x2矩阵值。
注意:该函数不支持非方形矩阵,例如在现代OpenGL版本中存在的mat3x2类型,相反,它将统一变量当作vec2数组处理。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix3x3 &value)
将当前上下文中位置的统一变量设置为3x3矩阵值。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix3x4 &value)
将当前上下文中位置的统一变量设置为3x4矩阵值。
注意:此函数不支持非方形矩阵,即现代OpenGL版本中存在的类似mat3x4的GLSL类型。相反,它将统一变量视为vec4数组。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix4x2 &value)
将当前上下文中位置的统一变量设置为4x2矩阵值。
注意:此函数不支持非方形矩阵,即现代OpenGL版本中存在的类似mat4x2的GLSL类型。相反,它将统一变量视为vec2数组。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix4x3 &value)
将当前上下文中位置的统一变量设置为4x3矩阵值。
注意:此函数不支持非方形矩阵,即现代OpenGL版本中存在的类似mat4x3的GLSL类型。相反,它将统一变量视为vec3数组。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QMatrix4x4 &value)
将当前上下文中位置的统一变量设置为4x4矩阵值。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const GLfloat[2][2] value)
这是重载函数。
将当前上下文中的统一变量在位置设置为2x2矩阵值。矩阵元素必须按列优先顺序指定。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const GLfloat[3][3] value)
这是重载函数。
将当前上下文中的统一变量在位置设置为3x3矩阵值。矩阵元素必须按列优先顺序指定。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const GLfloat[4][4] value)
这是重载函数。
将当前上下文中的统一变量在位置设置为4x4矩阵值。矩阵元素必须按列优先顺序指定。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(int location, const QTransform &value)
将当前上下文中的统一变量在位置设置为3x3转换矩阵值,该值指定为QTransform值。
要将QTransform值作为4x4矩阵在着色器中设置,请使用setUniformValue(location, QMatrix4x4(value))
。
void QOpenGLShaderProgram::setUniformValue(const char *name, GLfloat value)
这是重载函数。
将当前上下文中的统一变量名为name的变量设置为value。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, GLint value)
这是重载函数。
将当前上下文中的统一变量名为name的变量设置为value。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, GLuint value)
这是重载函数。
将当前上下文中的统一变量名为name的变量设置为value。当设置采样器值时应使用此函数。
注意:此函数不了解现代 OpenGL 版本中的无符号整型支持,因此将 value 作为 GLint 处理,并调用 glUniform1i。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, GLfloat x, GLfloat y)
这是重载函数。
将当前上下文中的统一变量名为name的变量设置为2D向量(x, y)。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z)
这是重载函数。
将当前上下文中的统一变量名为name的变量设置为3D向量(x, y, z)。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, GLfloat x, GLfloat y, Glover z, Glover w)
这是重载函数。
将当前上下文中的统一变量名为name的变量设置为4D向量(x, y, z, w)。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QVector2D &value)
这是重载函数。
将当前上下文中的统一变量名为name的变量设置为value。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QVector3D &value)
这是重载函数。
将当前上下文中的统一变量名为name的变量设置为value。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValue(const char *name, const QVector4D &value)
这是重载函数。
将当前上下文中的统一变量名为name的变量设置为value。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const GLfloat *values, int count, int tupleSize)
将当前上下文中的location处的uniform变量数组设置为values中的count个元素。每个元素有tupleSize个组件。 tupleSize必须是1、2、3或4。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const GLint *values, int count)
将当前上下文中的location处的uniform变量数组设置为values中的count个元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const GLuint *values, int count)
将当前上下文中的location处的uniform变量数组设置为values中的count个元素。当设置采样器值数组时,应使用此重载。
注意:此函数不了解现代OpenGL版本中的unsigned int支持,因此将values视为GLint并调用glUniform1iv。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const QVector2D *values, int count)
将当前上下文中的uniform变量数组设置为values中的count个2D向量元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const QVector3D *values, int count)
将当前上下文中的uniform变量数组设置为values中的count个3D向量元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const QVector4D *values, int count)
将当前上下文中的uniform变量数组设置为values中的count个4D向量元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix2x2 *values, int count)
将当前上下文中的uniform变量数组设置为values中的count个2x2矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix2x3 *values, int count)
将当前上下文中位置为location的统一变量数组设置为values中count个2x3矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix2x4 *values, int count)
将当前上下文中位置为location的统一变量数组设置为values中count个2x4矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix3x2 *values, int count)
将当前上下文中位置为location的统一变量数组设置为values中count个3x2矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix3x3 *values, int count)
将当前上下文中位置为location的统一变量数组设置为values中count个3x3矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix3x4 *values, int count)
将当前上下文中位置为location的统一变量数组设置为values中count个3x4矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix4x2 *values, int count)
将当前上下文中位置为location的统一变量数组设置为values中count个4x2矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix4x3 *values, int count)
将当前上下文中位置为location的统一变量数组设置为values中count个4x3矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(int location, const QMatrix4x4 *values, int count)
将当前上下文中位置为location的统一变量数组设置为values中count个4x4矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const GLfloat *values, int count, int tupleSize)
这是重载函数。
在当前上下文中将名为 name 的一致变量数组设置为 values 中的 count 个元素。每个元素具有 tupleSize 个组件。必须 tupleSize 为 1、2、3 或 4。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const GLint *values, int count)
这是重载函数。
在当前上下文中将名为 name 的一致变量数组设置为 values 中的 count 个元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const GLuint *values, int count)
这是重载函数。
在当前上下文中将名为 name 的一致变量数组设置为 values 中的 count 个元素。当设置采样器值数组时应使用此重载版本。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QVector2D *values, int count)
这是重载函数。
在当前上下文中将名为 name 的一致变量数组设置为 values 中的 count 个 2D 向量元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QVector3D *values, int count)
这是重载函数。
在当前上下文中将名为 name 的一致变量数组设置为 values 中的 count 个 3D 向量元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QVector4D *values, int count)
这是重载函数。
在当前上下文中将名为 name 的一致变量数组设置为 values 中的 count 个 4D 向量元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix2x2 *values, int count)
这是重载函数。
在当前上下文中将名为 name 的一致变量数组设置为 values 中的 count 个 2x2 矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix2x3 *values, int count)
这是重载函数。
在当前上下文中将名为 name 的一致变量数组设置为 values 中的 count 个 2x3 矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix2x4 *values, int count)
这是重载函数。
在当前上下文中将名为 name 的一致变量数组设置为 values 中的 count 个 2x4 矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix3x2 *values, int count)
这是重载函数。
在当前上下文中设置称为name的均匀变量数组,该数组包含values中的3x2矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix3x3 *values, int count)
这是重载函数。
将当前上下文中称为name的均匀变量数组设置为values中的3x3矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix3x4 *values, int count)
这是重载函数。
将当前上下文中称为name的均匀变量数组设置为values中的3x4矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix4x2 *values, int count)
这是重载函数。
将当前上下文中称为name的均匀变量数组设置为values中的4x2矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix4x3 *values, int count)
这是重载函数。
将当前上下文中称为name的均匀变量数组设置为values中的4x3矩阵元素。
另请参阅:setAttributeValue()。
void QOpenGLShaderProgram::setUniformValueArray(const char *name, const QMatrix4x4 *values, int count)
这是重载函数。
将当前上下文中称为name的均匀变量数组设置为values中的4x4矩阵元素。
另请参阅:setAttributeValue()。
QList<QOpenGLShader *> QOpenGLShaderProgram::shaders() const
返回使用addShader()添加到此着色器程序的所有着色器的列表。
另请参阅addShader() 和 removeShader。
int QOpenGLShaderProgram::uniformLocation(const char *name) const
返回在当前着色器程序的参数列表中均匀变量name的位置。如果name不是此着色器程序的有效均匀变量,则返回-1。
另请参阅attributeLocation。
int QOpenGLShaderProgram::uniformLocation(const QByteArray &name) const
这是重载函数。
返回在当前着色器程序的参数列表中均匀变量name的位置。如果name不是此着色器程序的有效均匀变量,则返回-1。
另请参阅attributeLocation。
int QOpenGLShaderProgram::uniformLocation(const QString &name) const
这是重载函数。
返回在当前着色器程序的参数列表中均匀变量name的位置。如果name不是此着色器程序的有效均匀变量,则返回-1。
另请参阅attributeLocation。
© 2024 Qt公司有限公司。本文档的贡献包含各自所有者的版权。本文件提供的文档受GNU自由文档许可协议版本1.3的许可,由自由软件基金会发布。Qt及其相关商标为芬兰及其它国家/地区的Qt公司所有。所有其他商标均为其各自所有者的财产。