加载纹理时缺少像素?

时间:2014-08-12 22:06:03

标签: 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);
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驱动程序......

1 个答案:

答案 0 :(得分:2)

GL_UNPACK_ALIGNMENT像素存储值控制传递给glTexImage2D()的纹理数据的行对齐。默认值为4.

由于您的数据每行有3个字节,因此将四舍五入到4的下一个倍数,即4.因此,使用默认值,glTexImage2D()将读取每行4个字节。

要使其工作,行对齐值必须更改为1:

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);