在 OpenSceneGraph 中用于设置像素存储模式的类。
我们可以通过 osg.PixelStorageModes 来设置像素的存储模式,以达到更好的渲染效果。
osg.PixelStorageModes 的属性包括像素的存储顺序、像素的位深、像素的行对齐方式等。
GLint _pack_alignment设置像素数据存储时的对齐方式,默认值为4。
对于每一个像素数据,它的存储大小可能并不是 1 字节,而有时候会是 3、4 或者其他大小的字节。因此,我们需要对每个像素的存储进行对齐,以保证数据的正确性。
_pack_alignment 表示多少字节为一个像素存储大小,比如说 _pack_alignment 为 4,表示每 4 个字节为一个存储单元。在存储的过程中,如果像素数据大小不足 _pack_alignment 的值,那么会自动填充。
GLint _unpack_alignment设置像素数据读取时的对齐方式,默认值为4。
_unpack_alignment 与 _pack_alignment 类似,不同的是它是在读取像素数据时使用的。
GLboolean _swap_bytes设置是否需要对像素的字节序进行交换,默认值为 false。
OpenSceneGraph 支持在不同字节序之间进行数据存取。比如说,一个 uint32_t 在小端模式下,是由 byte3 byte2 byte1 byte0 这样的顺序存储的。在大端模式下,就是 byte0 byte1 byte2 byte3 这样的顺序。如果不同模式之间需要进行数据交换,那么就需要设置 _swap_bytes。
GLboolean _image_transpose_hint是否翻转图像,默认值为 false。
设置为 true 的话,表示需要将图像进行翻转,以适应 OpenGL 的图像存储方式。
GLboolean _row_length_alignment行长度是否需要被对齐,默认值为 false。
如果我们需要对每行的像素进行对齐,那么就需要将 _row_length_alignment 设置为 true。
GLint _row_length将图像的宽度设置为一行像素的字节数,默认值为 0。
在某些情况下,我们需要对图像按行读取或者写入,比如说使用 glDrawPixels 函数进行像素绘制。这个时候就可以使用 _row_length 来设置行的大小,以达到更好的渲染效果。
GLint _skip_rows跳过图像的前 n 行数据,默认值为 0。
对于从文件中读取的图像,我们有时候需要跳过一些无用的前置信息,比如说 BMP、JPG等格式会在文件头中记录一些元信息,这些信息并不是我们需要的像素信息,所以我们需要通过 _skip_rows 来跳过这些数据。
GLint _skip_pixels跳过图像的前 n 个像素数据,默认值为 0。
与 _skip_rows 类似,它可以用来跳过每行的前置信息。比如说我们的像素数据存储格式可能是 RGB,其中 R 对应的是一个字节,G 对应的是一个字节,B 对应的是一个字节,那么每次读取像素数据的时候,就需要跳过 2 个字节的位置,也就是将 _skip_pixels 设置为 2。
osg.PixelStorageModes 可以用来设置像素的存储模式,比如说字节序、行对齐方式等等。这些属性可以帮助 OpenGL 更精确地渲染像素数据,以达到更好的图像效果。