0

我正在尝试在 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 以不同的方式存储统一位置。有谁知道另一种存储这些值的方法,以便它可以在两个浏览器中工作,而不必为每一帧“重新获取”它们?

4

1 回答 1

2

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

于 2010-12-04T22:50:19.903 回答