在绘制方法期间获取对 glsl 变量的引用?

Getting reference to glsl variable during draw method?

我看过 opengl 示例,它使用着色器,在每一帧绘制时都获取对 glsl 变量的引用,就像这样..

mColorHandle = getGL2().glGetUniformLocation(getShaderProgram(), "vColor");
gl2.glUniform4fv(mColorHandle, 1, getColorArray(), 0);

我不太明白为什么。

在自定义对象的初始化期间获得对 glsl 变量的引用一次不是更好吗?而在对象绘制中只需要这样做..

gl2.glUniform4fv(mColorHandle, 1, getColorArray(), 0);

我是否遗漏了为什么不断更新对变量的引用的原因?

当您不断使用同一个着色器时,您不必更新引用。

但是如果您在程序中使用多个着色器,从一个切换到另一个,您将必须在每个着色器中获取引用。

一些程序员并不真正介意每一帧都获取引用,因为这不是一个非常慢的操作,所以它不会影响很多性能。不过你说得对,留着更好

程序链接后的位置将永远不会为该程序更改。但是其他程序可能有其他位置绑定。

这意味着您实际上可以在绘制之间缓存 mColorHandle 值。我建议你这样做。