创建2D纹理数组后
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RED, 1024, 1024, 1, 0, GL_RED, GL_UNSIGNED_BYTE, NULL);
我使用glTexSubImage3D()函数逐段上传图像数据
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 66, 66, 1, GL_RED, GL_UNSIGNED_BYTE, data);
[图像被上传,但是方式不正确。它似乎被涂抹了,好像它使用的是不同的音高而不是66字节。这是在使用最新驱动程序的NVIDIA卡上。
[如果我将图像的宽度改为100像素(而不是99),这很有趣,上传正常。任何想法可能出什么问题吗?
发现了问题。 OpenGL的初始默认像素对齐方式为4,即使您指定像素数据格式为GL_RED。
通过将行对齐方式更改为1个字节
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
问题解决了。