【问题标题】:Missing Pixel When Loading Texture?加载纹理时缺少像素?
【发布时间】:2014-08-13 12:07:34
【问题描述】:

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

【问题讨论】:

  • 是否存在某种内部限制?我看到它每行添加 4 个字节,而不是假设的 3 个字节。

标签: opengl


【解决方案1】:

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

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

为了使这项工作,行对齐值必须更改为 1:

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

【讨论】:

  • 非常感谢,该设置是否适用于所有其他纹理加载,还是仅适用于下一次上传?
  • 这是一个全局设置。它将在上下文中保持有效,直到您将其更改为不同的值。
猜你喜欢
  • 2016-07-19
  • 2011-10-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2013-01-02
相关资源
最近更新 更多