OpenGL纹理和字节序问题

3
我正在使用GL_LUMINANCE和GL_UNSIGNED_BYTE的glTexSubImage2D函数来直接显示来自相机的原始灰度数据 - 而不是手动重新打包为RGB位图。
我想以更高分辨率模式运行相机,每像素12或14位。
我可以通过简单地设置GL_SHORT来实现这一点,但相机返回的数据是大端的,我的openGL实现似乎将其错误地绘制了(在x86上)。
是否有一种简单的方法告诉openGL纹理是“错误”的?我希望避免手动字节交换数据以进行显示,因为所有其他函数都期望大端数据。
1个回答

7
请查看glPixelStore*函数组。您可能需要调整GL_UNPACK_SWAP_BYTESGL_UNPACK_LSB_FIRST,但请确保您使用了正确的GL_UNPACK_ALIGNMENT。默认情况下,解包对齐方式为4,但如果您每个像素使用一个字节(lum / ub),则需要将其设置为1。我最近遇到了这个问题,花费的时间比我愿意承认的要长 :)

如果这让你感觉好一些的话,我第一次遇到这个问题时写了一个简短的GLSL程序来解决它。当我最终发现GL_UNPACK_ALIGNMENT时,我感到相当愚蠢。 - Tommy
@Tommy,这也是opengl.org通用陷阱列表中的第8项。http://www.opengl.org/resources/features/KilgardTechniques/oglpitfall/ 真是愚蠢的我们。 - luke
1
太好了 - glPixelStorei(GL_UNPACK_SWAP_BYTES,1);。这就是OpenGL的伟大之处,有人已经解决了它 - 你只需要知道在哪里。 - Martin Beckett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接