我一直在使用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