【发布时间】:2018-07-02 11:09:12
【问题描述】:
我有一个尺寸为 128x32128(相当于 251 128x128 层)的 PNG 文件,当我尝试以下操作时:
gl.texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.SRGB8_ALPHA8, 128, 128, 251)
gl.texSubImage3D(gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, 128, 128, 251, gl.RGBA, gl.UNSIGNED_BYTE, imageElement)
// imageElement.src = 128x32128.png
读取WebGL: INVALID_VALUE: texSubImage3D: width, height or depth out of range时出现浏览器错误
但是,如果我尝试与另一个尺寸为 128x8192(相当于 64 层 128x128)的图像非常相似的东西,我不会收到错误:
gl.texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.SRGB8_ALPHA8, 128, 128, 32)
gl.texSubImage3D(gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, 128, 128, 32, gl.RGBA, gl.UNSIGNED_BYTE, imageElement)
// imageElement.src = 128x8192.png
然而,如果我尝试与原始图像相同的代码,我会得到相同的错误:
gl.texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.SRGB8_ALPHA8, 128, 128, 32)
gl.texSubImage3D(gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, 128, 128, 32, gl.RGBA, gl.UNSIGNED_BYTE, imageElement)
// imageElement.src = 128x32128.png
这没有任何意义。当然这是一个实现错误,因为从示例 2 到示例 3 的唯一变化是图像,而不是 texSubImage3D 的参数。
浏览器:Windows 7 x64 上的 Chrome v67
【问题讨论】:
-
gl.getParameter(gl.MAX_TEXTURE_SIZE)返回什么? -
你试过火狐吗?
-
@Asaq 最大纹理大小为 16,384,但我请求的纹理为 128x128x251...
标签: javascript webgl webgl2