获取shader中的uniform变量并赋值
- 如何将数据设置到shader中去?比如mvp三大矩阵,比如顶点数据
- 在shader中有一个槽的概念。槽的编号是从0开始的。
- OpenGL会把槽和attribute、uniform等类型的变量对应上,就像下面这样:

attribute的变量对应到attribute的插槽上

uniform的变量对应到uniform的插槽上 - 我们给shader中变量设置值,就是告诉gpu哪个插槽上设置什么值就可以了
- 所以,我们只要知道shader中的变量对应的插槽,然后给那些插槽设置值,就是给shader中的变量设置值
- 获取shader中的变量
GLint positionLocation, modelMatrixLocation, viewMatrixLocation, projectionMatrixLocation;
positionLocation = glGetAttribLocation(program, "position");
modelMatrixLocation = glGetUniformLocation(program, "modelMatrix");
viewMatrixLocation = glGetUniformLocation(program, "viewMatrix");
projectionMatrixLocation = glGetUniformLocation(program, "projectionMatrix");
- 设置shader中的变量
1.设置前,需要先选一个程序,用来执行要绘制的指令
2.设置uniform变量时,调用glUniformMatrix4fv(),第一个参数传入shader中的插槽的位置;第二参数传设置矩阵的个数,因为一个插槽上可能对应的是一个矩阵数组;第三次参数表示矩阵从cpu到gpu传输的过程中需不需要对他进行转置;第四个参数传入数据的起始地址
3.当我们的绘制执行完了之后,也就变量的值设置完了之后,把当前程序设置为0号程序
glm::mat4 modelMatrix, viewMatrix, projectMatrix;
projectMatrix = glm::perspective(60.0f, width / height, 0.1f, 1000.0f);
glUseProgram(program);//选一个程序来执行绘制指令
glUniformMatrix4fv(modelMatrixLocation, 1, GL_FALSE, glm::value_ptr(modelMatrix));
glUniformMatrix4fv(viewMatrixLocation, 1, GL_FALSE, glm::value_ptr(viewMatrix));
glUniformMatrix4fv(projectionMatrixLocation, 1, GL_FALSE, glm::value_ptr(projectMatrix));
glUseProgram(0);//当前程序设置为0号程序