我见过的所有 WebGL 示例代码都调用 gl.useProgram(),然后为程序设置每个制服,每帧一次。问题是,在 WebGL 项目中你可以做的最昂贵的两件事是运行 Javascript 行并将 Javascript 中的内容复制到着色器中,每个人每秒都做 60 次。另外,我知道我的大部分制服,在我自己的程序中,不会因帧而异。(主要是轻的位置等,你可以弄乱但通常不会弄乱的东西。)
我的问题是,WebGL 规范对制服的值保留多长时间有什么要说的吗?如果我调用 gl.useProgram(),我刚刚停止使用的程序是否会丢失它的制服?如果调用 gl.useProgram() 打乱了制服,我可以不每帧都调用它,并保留我的制服吗?
如果我可以强制所有用户永远只运行 Firefox 22.0,我可以编写并运行一些测试代码,并且很快就能解决这个问题。可悲...