填充字节是否应该传递给 glteximage2d
Should padding bytes be passed to glteximage2d
标题本身就说明了问题。
glTexImage2D 的最后一个参数是字节数组(无符号,有符号取决于)。
rgb 数组是否应该包含填充字节?
简短的回答是否定的。我通常创建一个结构数组。
结构如下:
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];
Should RGB array contain padding bytes or not?
这完全取决于您的需要。您可以配置 OpenGL 以接受各种数据布局。看glPixelStore的参考文档,unpack参数是你应该看的
通常在行之间找到填充字节,以填充到特定的对齐方式。解包对齐指定每个行.
的字节对齐
如果您的像素是每个组件 8 位,但打包成 4 个字节,每个字节都有一个填充字节,您可以通过将数据类型声明为 GL_UNSIGNED_INT_8_8_8_8
来指定;如果您使用少于 4 个组件的 type/internal 类型,多余的字节将被忽略。
标题本身就说明了问题。 glTexImage2D 的最后一个参数是字节数组(无符号,有符号取决于)。
rgb 数组是否应该包含填充字节?
简短的回答是否定的。我通常创建一个结构数组。
结构如下:
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];
Should RGB array contain padding bytes or not?
这完全取决于您的需要。您可以配置 OpenGL 以接受各种数据布局。看glPixelStore的参考文档,unpack参数是你应该看的
通常在行之间找到填充字节,以填充到特定的对齐方式。解包对齐指定每个行.
的字节对齐如果您的像素是每个组件 8 位,但打包成 4 个字节,每个字节都有一个填充字节,您可以通过将数据类型声明为 GL_UNSIGNED_INT_8_8_8_8
来指定;如果您使用少于 4 个组件的 type/internal 类型,多余的字节将被忽略。