我正在尝试为使用 初始化的纹理创建 mipmap gl.texStorage2d()
,但是GL_INVALID_OPERATION
在调用gl.generateMipmap( gl.TEXTURE_2D )
. 我的测试纹理是 128x128 并且在没有 mipmap 的情况下显示良好。
我可以在不使用 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 );