OpenGL ES 2.0:更好地填充纹理像素而不是使用紧密数据?

时间:2011-10-20 09:41:02

标签: alignment padding textures opengl-es-2.0

我刚刚看到一个包含代码的纹理示例:

GLubyte pixels[4 * 3] =
{
  255,  0,   0,  // Red
  0,  255,   0,  // Green
  0,    0, 255,  // Blue
255,  255,   0   // Yellow
};

// Use tightly packed data.
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

每个像素另外存储一个填充组件并指定4字节对齐不是更好吗?

我对表演感兴趣。

非常感谢

1 个答案:

答案 0 :(得分:1)

我正在玩它一段时间,并得出(预期)结论。如果加载原生像素格式(例如,RGB565或RGB5_A1),则有一点点(大约快10%)具有4字节对齐的像素。加载其他像素格式(RGB8或RGBA8)时,速度稍微快一点(如1%)。

这与PC级显卡相同,如果加载本机BGRA8(NVIDIA),对齐可能会有所不同,但如果驱动程序需要调整数据或执行位移,则不会做出如此大的不同。

我正在测试加载256x256 RGB纹理,3或4字节对齐,100次。在测试之间删除了纹理。测试包含glFlush()和glFinish(),因此不存在待定的无序操作。