Opengl 加载纹理时缺少像素?
我正在尝试加载一个3x10图像,每“像素”仅使用1字节。此像素是单个alpha 当我按如下方式加载图像时,由于某种原因,每四个像素都会被丢弃。没有opengl错误,我没有2个硬件支持的力量 因此,如果我有以下像素缓冲区:{0,1,2,3,4,5,6,7,8,9,10},图像将如下所示:Opengl 加载纹理时缺少像素?,opengl,Opengl,我正在尝试加载一个3x10图像,每“像素”仅使用1字节。此像素是单个alpha 当我按如下方式加载图像时,由于某种原因,每四个像素都会被丢弃。没有opengl错误,我没有2个硬件支持的力量 因此,如果我有以下像素缓冲区:{0,1,2,3,4,5,6,7,8,9,10},图像将如下所示: 0 1 2 4 5 6 8 9 10 ... 纹理加载代码: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTex
0 1 2
4 5 6
8 9 10
...
纹理加载代码:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA8, 3, 10, 0, GL_ALPHA, GL_UNSIGNED_BYTE, pixels);
我真的不知道发生了什么,我被难住了。是否有任何东西可能导致这种行为?我也有最新的opengl驱动程序…像素存储值控制传递到
glTexImage2D()
的纹理数据的行对齐。默认值为4
由于您的数据每行有3个字节,因此将向上舍入到下一个4的倍数,即4。因此,使用默认值,glTexImage2D()
将每行读取4个字节
要执行此操作,必须将行对齐值更改为1:
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
是否存在某种内部限制?我看到它每行增加了4个字节,而不是假设的3个字节。多谢了,伙计,这个设置是否适用于所有其他纹理加载,还是仅适用于下一次上载?这是一个全局设置。它将对上下文保持有效,直到您将其更改为其他值。