У меня есть файл PNG с размерами 128x32128 (что эквивалентно 251 слою 128x128) и при попытке выполнить следующее:
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.
Браузер: Chrome v67 в Windows 7 x64