我已经读过,如果将顶点数据对齐为32个字节,某些图形卡会受益。
这通常涉及添加填充:
typedef struct {
float x, y, z;
int padding[5];
} Vertex;
但我一直在想,这是否也意味着你应该将数据分配到32字节(malloc对齐为1字节)?意味着指向数据的指针会均匀分配到32?这有关系吗?
(我将此数据上传到VBO)
由于
答案 0 :(得分:7)
通常,如果源内存对齐(目标通常是),则从客户端内存到VBO的复制操作可以更快。这在某种程度上取决于你如何上传到VBO。
也就是说,上传将是唯一可以通过对齐得到提升的东西。一旦内存在VBO中,它就是重要的VBO服务器内存(你不能控制)的对齐(GL实现知道这一点,并且它们确实调整了VBO内存)。
哦,带有20个字节填充的32字节不会比带有4个字节填充的16更快。重要的是你有两个幂的大小,这样一个完整的顶点提取不会跨越高速缓存行。
最后,malloc不对齐1个字节。它至少与基本类型的最小对齐要求一致,在大多数平台上为8。