OpenGL Shader Key Points

Posted 力为

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL Shader Key Points相关的知识,希望对你有一定的参考价值。


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绑定

以上是关于OpenGL Shader Key Points的主要内容,如果未能解决你的问题,请参考以下文章

3D Computer Grapihcs Using OpenGL - 07 Passing Data from Vertex to Fragment Shader

OpenGL ES 2.0 shader开发

GLSL 在OpenGL中向shader传递信息

OpenGL学习——Shader

OpenGL 各个shader的作用和区别

试图理解 OpenGL 中的像素和 GL_POINTS