1

我已经读到,如果您将顶点数据对齐为 32 字节,则某些显卡会受益。

这通常涉及添加填充:

typedef struct {
  float x, y, z;
  int padding[5];
} Vertex;

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

(我正在将此数据上传到 VBO)

谢谢

4

1 回答 1

8

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

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

哦,带有 20 字节填充的 32 字节不会比带有 4 字节填充的 16 字节快。重要的是你有一个二次方的大小,这样一个完整的顶点提取就不会跨越缓存线。

最后,malloc 不对齐到 1 个字节。它至少符合基本类型的最低对齐要求,在大多数平台上是 8。

于 2011-02-02T21:07:18.810 回答