每帧调用glGetUniformLocation()

Tri*_*ram 1 c++ opengl 3d matrix glm-math

我有一个OpenGL应用程序,它使用着色器和顶点缓冲区对象,GLM用于矩阵和向量.因为每帧都有矩阵变换,所以我每帧都调用glUniformMatrix4fv().以下是我的代码片段:

ViewMatrix = glm::rotate(glm::mat4(1.0f), glm::radians(YRotation), glm::vec3(0.0f, 1.0f, 0.0f)) * ViewMatrix;
ViewMatrix = glm::rotate(glm::mat4(1.0f), glm::radians(XRotation), glm::vec3(1.0f, 0.0f, 0.0f)) * ViewMatrix;
ViewMatrix = glm::translate(glm::mat4(1.0f), Translate) * ViewMatrix;

...

glUniformMatrix4fv(ShaderProgram->GetUniformLocation("View"), 1, GL_FALSE, glm::value_ptr(ViewMatrix));
Run Code Online (Sandbox Code Playgroud)

如图所示,我调用GetUniformLocation()来获取我在着色器中声明为uniform的View矩阵的位置.它是一个CProgram类的成员函数,它只调用glGetUniformLocation().因为每帧都会调用它,所以我想知道在程序开始时只调用一次glGetUniformLocation()会更好,并重复使用从中返回的值.帧率实际上会有明显的差异吗?

Leo*_*ini 5

您的统一位置永远不会跨帧更改,因为着色器变量的位置在"着色器编译时"分配.因此,如果将值存储在变量中,您将跳过函数调用....不要指望顺便进行大的改进;)