1

我一直在使用 WebGL,但似乎我无法再显示纹理了。片段着色器的输出始终为黑色(轮廓可见)。

我知道这个问题可能会出现在不是 2 次方的纹理上。不幸的是我的是(256x256)。此外,我确实让他们在某些时候工作过(但我改变太多以回溯问题)。

编辑:我已经大大简化了我的程序,并且按照 gman 的建议使用了 WebGL Inspector(顺便说一句很棒的提示)。WebGL Inspector 中的纹理看起来不错。当我注意到时,我正要发布整个代码

var textureUniformLocation = gl.getUniformLocation(shaderProgram, "uSampler");
console.log(textureUniformLocation);
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, neheTexture);
gl.uniform1i(textureUniformLocation, 0);

不行,加个alert(textureUniformLocation);afterconsole.log(...)会让贴图出现……我现在想知道的是:我的显卡是不是吸毒了?

EDIT2:如果我也将一个简单的字符串放入警报中,它将起作用。

我能想到会发生这种情况的唯一原因是糟糕的内存管理或多个执行线程。他们都不是这里的情况。什么样的事情甚至可能在javascript中导致这样的问题?

任何帮助将不胜感激。

4

1 回答 1

0

如果检查员看到纹理,那么......它们可能正在加载。Chrome 和 Firefox 中的行为是否一致?关于 alert() 的报告行为让我认为渲染可能发生在纹理加载之前,并且 alert() 导致刷新(在纹理加载之后)。

还要确保这不是顶点属性(如顶点颜色或退化的 UV 坐标)的问题。

于 2012-12-31T12:00:43.350 回答