QGLShaderProgram类
QGLShaderProgram:
1)QGLShaderProgram类允许链接和使用OpenGL着色程序。
2)这个类支持用OpenGL着色语言(GLSL)和OpenGL/ES着色语言(GLSL/ES)编写的着色程序。
3)下面的示例使用提供的源代码创建顶点着色器程序。一旦编译并链接,着色器程序在当前的QGLContext中被激活,方法是调用QGLShaderProgram::bind():
4)构造一个新的着色器程序并附属于父进程。直到调用addShader()这个函数前,该着色器程序是无效的。
5)着色器程序会与当前的QGLContext进行关联。
bool QGLShaderProgram::addShader(QGLShader *shader)
1)添加一个编译完的着色器程序。成功返回true,否则返回false。
2)shader的所有权仍由调用者持有。当QGLShaderProgram实例被销毁时,shader不会被销毁。
3)它允许调用者添加相同的着色器到多个着色器程序中。
bool QGLShaderProgram::addShaderFromSourceCode(QGLShader::ShaderType type, const char *source)
1)将源代码编译成指定类型的着色器程序。如果编译成功返回true,否则false。编译产生的错误和警告信息通过log()函数获取。
2)该函数被用于快速添加顶点和片元着色器,而不用创建事先创建QGLShader。
[virtual] bool QGLShaderProgram::link()
1)该函数会链接使用addShader()添加的着色器。
2)成功返回true,否则false。如果链接失败,错误信息通过log()函数获取。
3)子类可以覆盖该函数,用于初始化属性和统一变量,以便在特定的着色器程序中使用。
4)如果着色器程序已经链接,调用该函数会强制重新链接。
bool QGLShaderProgram::bind()
1)绑定着色器程序到当前激活的QGLContxt,并使之成为当前的着色器程序。
2)之前绑定的任何着色器程序都会被释放。
3)这相当于在programId()上调用glUseProgram()。
4)如果着色器程序成功绑定返回true,否则返回false。
5)如果该着色器程序未链接,或者需要重新链接,该函数会调用link()函数。
int QGLShaderProgram::attributeLocation(const char *name) const
1)返回该属性在着色器程序参数列表中的索引数值。
int QGLShaderProgram::uniformLocation(const char *name) const
1)返回该统一变量名在着色器程序参数列表中的索引数值。
void QGLShaderProgram::setAttributeValue(int location, GLfloat value)
1)在当前上下文中,将location索引值位置的属性值设置未value。