我一直在使用WebGL,但似乎我无法管理显示纹理了。片段着色器的输出始终为黑色(轮廓可见)。什么会导致片段着色器中的纹理变黑?
我知道这个问题可能会发生与纹理不是两个幂。不幸的是我的(256x256)。此外,我确实在某些时候让他们工作了(但我改变了太多以回溯问题)。
编辑: 我已经大大简化了我的程序,并由gman使用WebGL Inspector(伟大的提示btw)建议。 纹理从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);
不起作用,console.log(...)
后加入alert(textureUniformLocation);
使得纹理看起来... 我现在想知道的是:我的显卡在做药物?
编辑2:它会工作,如果我把一个简单的字符串在警报以及。
我能想到的唯一原因是会出现内存管理不良或多个执行线程。这两种情况都不是这里的情况。什么样的事情甚至可以在JavaScript中导致这样的问题?
任何帮助将不胜感激。
尝试将其更改为'gl_FragColor = vec4(texture2D(...)。rgb,1.0);'只是为了确保它不是您的alpha值为零? – gman
也是同样的问题,如果在之前的纹理工作之后就可以工作的话,会感到惊讶。 – DrBearhands
我开始添加一些'console.log()'语句。打印统一的位置(确保它们都不为空)。也许试试'WebGL Inspector'。将'gl_FragColor'设置为像'vec4(0,1,0,1)'这样的常量会使绿色变成正确的?你有不止一个着色器程序?有没有在正确的程序上调用'gl.useProgram'?从一个可用的示例开始,开始将代码粘贴到它中,直到它停止工作。 – gman