填充字节是否应该传递给 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 类型,多余的字节将被忽略。