填充字节应该传递给glteximage2d

时间:2015-01-06 16:03:57

标签: opengl

标题本身解释了这个问题。 glTexImage2D的最后一个参数是字节数组(unsigned,signed depends)。

rgb数组是否应包含填充字节?

2 个答案:

答案 0 :(得分:1)

  

RGB数组是否应包含填充字节?

这完全取决于您的需求。您可以配置OpenGL以接受各种数据布局。请参阅glPixelStore的参考文档, unpack 参数是您应该查看的内容。

通常在行之间找到填充字节,以填充某个对齐。解包对齐指定每个行的字节对齐

如果您的像素是每个组件8位,但是每个都有一个填充字节打包成4个字节,您可以通过将数据类型声明为GL_UNSIGNED_INT_8_8_8_8来指定;如果使用少于4个组件的类型/内部类型,则忽略过多的字节。

答案 1 :(得分:-1)

简短的回答是否定的。我通常会创建一个结构数组。

结构如下:

typedef struct
{
    unsigned char red;
    unsigned char green;
    unsigned char blue;
    unsigned char alpha;
} AlphaPixelBytes;

然后我创建的数组看起来像:

AlphaPixelBytes bitmapData[NUMTEXTUREPOINTS];

然后,您可以在创建纹理时使用bitmapData作为glTexImage2D的最后一个参数,或者您可以将NULL作为最后一个参数传递,以创建一个空格局,之后您将使用glTexSubImage2D填充。

这种结构数组也可用作NSBitmapImageRep的数据源,以便在导出纹理的PNG文件时使用(例如)。

编辑:

抱歉,我没有注意到您正在处理RGB而不是RGBA数据。 RGB的结构如下所示:

typedef struct
{
    unsigned char red;
    unsigned char green;
    unsigned char blue;
} PixelBytes;

阵列:

PixelBytes bitmapData[NUMTEXTUREPOINTS];