我正在尝试为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