什么可能导致碎片着色器中的纹理变黑?

时间:2012-12-22 15:50:30

标签: javascript glsl textures webgl

我一直在使用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中出现这样的问题?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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

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