OpenGL版本> = 2.0是否要求纹理尺寸为4像素的倍数?

Dun*_*n C 4 opengl macos textures glteximage2d

我正在使用使用OpenGL纹理的Mac应用程序,该纹理是使用glTexImage2D从磁盘上的图像文件加载的。

根据文档,对于OpenGL版本> = 2.0,纹理可以是任意大小。(对于版本<2.0,x和y尺寸都必须为2的幂。)

但是,如果我的图像尺寸不是4的偶数倍,则纹理会变差。我已经进行了搜索和搜索,但是找不到有关此要求的任何文档。实际上,“红皮书”明确指出,纹理尺寸可以是> = 2.0版本的任何值。

我想念什么?

而且,将纹理转换为下一个最大的2幂次方是否有性能优势?我的应用程序需要Mac OS 10.6.6或更高版本,该操作系统应可在任何Intel Mac上运行。某些早期的Intel macs具有非常“不起眼”的图形硬件。

任何帮助将不胜感激。

dat*_*olf 5

尺寸为2的幂的普通纹理的约束在OpenGL版本> = 2中仍然存在。但是,支持一个新的纹理目标GL_TEXTURE_RECTANGLE,它支持任意尺寸,但不会进行mipmaping。

尺寸是4的倍数没有限制,但是我怀疑您可能设置了glPixelStore(GL_UNPACK ...)参数,可能是程序的其他部分设置了参数,导致了这种行为。

  • +1:如果您上传RGB纹理而不在每行末尾填充,则glPixelStore(GL_UNPACK_ALIGNMENT,1)可能是您的朋友。 (6认同)
  • 这是不正确的。OpenGL 2.0引入了两个纹理的非幂。GL_TEXTURE_RECTANGLE也适用于NPOT纹理,但它限于未标准化的坐标且没有mipmap,并且它是OpenGL 3.x的核心 (3认同)