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