OpenGL - 顶点结构的对齐为32字节?

Pub*_*bby 1 c opengl alignment padding vertex

我已经读过,如果将顶点数据对齐为32字节,某些图形卡会受益.

这通常涉及添加填充:

typedef struct {
  float x, y, z;
  int padding[5];
} Vertex;
Run Code Online (Sandbox Code Playgroud)

但我一直想知道,这是否也意味着您应该将数据分配到32字节(malloc对齐为1字节)?意味着指向数据的指针会均匀分配到32?有关系吗?

(我将这些数据上传到VBO)

谢谢

Bah*_*bar 8

通常,如果源内存对齐(目标通常是),则从客户端内存到VBO的复制操作可以更快.这在某种程度上取决于你如何上传到VBO.

也就是说,上传将是唯一可以通过对齐得到提升的东西.一旦内存在VBO中,那就是重要的VBO服务器内存(你无法控制)的对齐(GL实现知道这一点,并且它们确实调整了VBO内存).

哦,32字节填充20字节不会比16字节填充快16.重要的是你有两个幂的大小,这样一个完整的顶点提取不会跨越高速缓存行.

最后,malloc不对齐1个字节.它至少与基本类型的最小对齐要求一致,在大多数平台上为8.