WebGl Uniforms返回值

时间:2010-12-04 22:07:22

标签: shader webgl uniform

我正在尝试在WebGl中创建一个简单的3D应用程序,其中绘制的每个对象都附加了自己的着色器。但是我在Firefox中有一个奇怪的问题(在Chrome中这很完美),其中每个着色器中每个矩阵/采样器的统一位置都没有正确保存。意思是每次我更改当前着色器时,我必须为每个我的着色器使用的矩阵调用getUniformLocation,这对我来说似乎有点浪费。

tmp.pMatrixUniform = this.gl.getUniformLocation(tmp, "uPMatrix"); //perpesctive
tmp.mvMatrixUniform = this.gl.getUniformLocation(tmp, "uMVMatrix");  //world transform
tmp.samplerUniform = this.gl.getUniformLocation(tmp, "uSampler"); //texture sampler

return tmp;

上面的代码是我创建着色器并将其存储以供跨多个对象使用的地方。我知道tmp着色器对象的引用是正确存储和修改的,因为在这些代码行的上方我以类似的方式保存每个属性位置,对于“当前着色器”的每次更改都不需要重置

就像我说的,这不仅适用于Firefox,这让我相信Firefox和Chrome会以不同的方式存储统一的位置。有没有人知道另一种存储这些值的方法,以便它可以在两种浏览器中运行,而不必为每一帧“重新获取”它们?

1 个答案:

答案 0 :(得分:2)

我解决了这个问题。事实证明,这不是函数本身的问题,而是当切换到新的着色器时,我总是链接它而不是仅在创建时链接着色器。

相关问题