我正在嘗試爲gl.texStorage2d()
初始化紋理創建mipmap,但在撥打gl.generateMipmap(gl.TEXTURE_2D)
時我得到GL_INVALID_OPERATION
。我的測試紋理是128x128,並且顯示正常而沒有mipmap。爲什麼我的gl.generateMipmap返回GL_INVALID_OPERATION?
我可以在不使用texStorage的情況下創建mipmap,但是我在某處讀到它允許驅動程序更有效地執行。我在使用NVIDIA GT 750M的macOS Sierra上使用Chrome 57.0.2987.133。
如何在仍然使用texStorage時修復錯誤?
我還注意到,如果我用gl.SRGB8_ALPHA8
替換gl.RGBA8
,但我想使用前者,我的代碼無錯誤地工作。
function handleLoadedTexture(image)
{
let textTexture = gl.createTexture();
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, textTexture);
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_BASE_LEVEL, 0);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAX_LEVEL, Math.log2(image.width));
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texStorage2D(gl.TEXTURE_2D, Math.log2(image.width), gl.SRGB8_ALPHA8, image.width, image.height);
gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, image);
gl.generateMipmap(gl.TEXTURE_2D);
火狐錯誤讓我試試'gl.RGBA8'代替gl.SRGB8_ALPHA8'的'和它的作品。讓我們希望他們修復這個錯誤,並感謝您編寫WebGL2基礎! – SurvivalMachine
Firefox中的錯誤/警告消失在Firefox Nightly 55.0a1(2017-04-16)(64位) – gman