OpenGL Shader Key Points (2)

OpenGL Shader Key Points (2)

1.  Uniform

1.1.  Uniform变量

不是所有的变量都是跟顶点一一对应的,如变换矩阵,光源位置等。

Uniform变量可以在任何类型的shader中使用,但只能作为输入值,不能在shader中给它赋值,只能在C/C++程序中指定。

 

 

layout (location = 0) in vec3 VertexPosition;
layout (location = 1) in vec3 VertexColor;
out vec3 Color;
uniform mat4 RotationMatrix;
void main()
{
Color = VertexColor;
gl_Position = RotationMatrix *vec4(VertexPosition,1.0);
}
 

在程序中指定uniform的值:

GLuint location =glGetUniformLocation(programHandle,  "RotationMatrix");
if( location >= 0 )
{
glUniformMatrix4fv(location, 1, GL_FALSE,  &rotationMatrix[0][0]);
}

 

API:

         遍历shader program所有的uniform变量

         glGetProgramiv

glGetActiveUniform

glGetActiveUniformName

glGetUniformLocation

 

1.2.  Uniform blocks

单独的uniform变量是跟shader program绑定的,因而不能在多shader program中共享。

Uniform blocks用来在不同的shaderprogram中共享uniform数据。

 

API:

glGetUniformBlockIndex //根据名称找到uniformblocks的索引

glGetActiveUniformBlockiv //根据索引找到blocks的大小

glGetUniformIndices//根据uniform blocks的各分量的名字找到索引

glGetActiveUniformsiv//找到各分量的便宜量,这样就可以分配block并设置分量的值。

 

1.2.1.  创建uniform buffer object (UBO):

GL_UNIFORM_BUFFER

glGenBuffers

glBindBuffer

glBufferData

glBindBufferBase // UBO与uniformblocks绑定

原文链接: https://www.cnblogs.com/wuwuwu/p/6335152.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    OpenGL Shader Key Points (2)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/99662

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月10日 上午5:19
下一篇 2023年2月10日 上午5:20

相关推荐