主要问题是您使用的第二个参数glTexImage3D()
:
glTexImage3D(GL_TEXTURE_2D_ARRAY, 1, // level GL_RGBA8, // Internal format width, height, 1, // width,height,depth 0, // border? GL_RGBA, // format GL_UNSIGNED_BYTE, // type 0); // pointer to data
因为glTexImage3D()
,参数名为level,并且是您为其指定数据的级别的从0开始的索引,或者仅在最后一个参数为NULL时分配.这与级别(注释复数)参数不同glTexStorage3D()
,后者是要分配的级别的计数.
实际上,第二个参数glTexImage3D()
直接对应于glTexSubImage3D()
你已经传递的第二个参数0
.
所以正确的调用只是0
用于第二个参数:
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, // level GL_RGBA8, // Internal format width, height, 1, // width,height,depth 0, // border? GL_RGBA, // format GL_UNSIGNED_BYTE, // type 0); // pointer to data
另外,我很惊讶你的glTexSubImage3D()
通话工作.GL_RGBA8
作为第9个参数无效.在这种情况下,这是一种格式,而不是internalFormat,这意味着它是一种未经过格式化的格式.这种情况下的值应该是GL_RGBA
:
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, // Mipmap number 0, 0, 0, // xoffset, yoffset, zoffset width, height, 1, // width, height, depth GL_RGBA, // format GL_UNSIGNED_BYTE, // type image); // pointer to data