Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 加载纹理时缺少像素?_Opengl - Fatal编程技术网

Opengl 加载纹理时缺少像素?

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

我正在尝试加载一个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驱动程序…

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

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

要执行此操作,必须将行对齐值更改为1:

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

是否存在某种内部限制?我看到它每行增加了4个字节,而不是假设的3个字节。多谢了,伙计,这个设置是否适用于所有其他纹理加载,还是仅适用于下一次上载?这是一个全局设置。它将对上下文保持有效,直到您将其更改为其他值。