我一直在使用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);
使纹理出现后添加console.log(...)
...
我现在想知道的是:我的显卡是否在吸毒?
EDIT2:如果我在警报中放入一个简单的字符串,它也会有效。
我能想到这一点的唯一原因是坏内存管理或多个执行线程。他们都不是这里的情况。什么样的东西甚至可能导致javascript中出现这样的问题?
非常感谢任何帮助。
答案 0 :(得分:0)
如果检查员看到纹理,那么......他们可能加载。 Chrome和Firefox的行为是否一致?报告的关于alert()的行为让我觉得渲染可能发生在纹理加载之前,而alert()导致刷新(纹理加载之后)。
同时确保这不是顶点属性(如顶点颜色或退化UV坐标)的问题。