给定图像的间距,如何计算GL_UNPACK_ALIGNMENT?

时间:2013-02-24 14:02:10

标签: opengl

大多数图像库将图像作为宽度,高度,间距,然后是数组像素。然而,OpenGL不直接采用音调,而是期望:

 glPixelStorei(GL_UNPACK_ALIGNMENT, align);
 glPixelStorei(GL_UNPACK_ROW_LENGTH, row_length);

row_lengthpitch / bytes_per_pixel,但如何计算align的正确值?

2 个答案:

答案 0 :(得分:0)

对于您将看到的绝大多数图片,您不应该需要GL_ROW_LENGTH。将此值设置为非零值会严重降低上载性能;只有当你完全需要时才使用它。

对于大多数图像,音高只是(width * bpp),与某些边界对齐。例如,如果bpp为3(每像素字节数),宽度为9,则得到27.对于许多计算机来说,这不是一个很好的行号,所以它们通常会将它对齐到最接近的倍数因此,你在大多数图像中看到的音高是28。

因此,要计算对齐,只需计算分为音高的2的最大幂(最多8)。如果图像中的音高为28,则2的最大幂为4.将其设置为GL_UNPACK_ALIGNMENT。通常,您可以在4处停止,因为这是大多数图像将使用的最大对齐方式。

需要使用GL_ROW_LENGTH的时间是计算出的音高(align(width * bpp, alignment))不等于实际音高的时间。如果发生这种情况,则需要同时使用对齐和行长度。但是这种情况非常罕见,你应该放弃任何使用这种极不正确的音调的图像。

答案 1 :(得分:-1)

GL_UNPACK_ALIGNMENT是行中第一个像素在图像中开始的字节偏移量。将它设置为一个几乎总是安全的赌注(即,它几乎适用于所有图像类型[并且它永远不会对我有用]。)

默认值为4,对于RGBA图像效果很好,但对于RGB图像却很失败(当你看到图像时你会立刻知道 - 它看起来就像是一组对角线)。