在绘制方法期间获取对 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
值。我建议你这样做。
我看过 opengl 示例,它使用着色器,在每一帧绘制时都获取对 glsl 变量的引用,就像这样..
mColorHandle = getGL2().glGetUniformLocation(getShaderProgram(), "vColor");
gl2.glUniform4fv(mColorHandle, 1, getColorArray(), 0);
我不太明白为什么。
在自定义对象的初始化期间获得对 glsl 变量的引用一次不是更好吗?而在对象绘制中只需要这样做..
gl2.glUniform4fv(mColorHandle, 1, getColorArray(), 0);
我是否遗漏了为什么不断更新对变量的引用的原因?
当您不断使用同一个着色器时,您不必更新引用。
但是如果您在程序中使用多个着色器,从一个切换到另一个,您将必须在每个着色器中获取引用。
一些程序员并不真正介意每一帧都获取引用,因为这不是一个非常慢的操作,所以它不会影响很多性能。不过你说得对,留着更好
程序链接后的位置将永远不会为该程序更改。但是其他程序可能有其他位置绑定。
这意味着您实际上可以在绘制之间缓存 mColorHandle
值。我建议你这样做。