标题本身解释了这个问题。 glTexImage2D的最后一个参数是字节数组(unsigned,signed depends)。
rgb数组是否应包含填充字节?
答案 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];