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。

posted @ 2020-02-11 15:06  helloc14  阅读(857)  评论(0编辑  收藏  举报