2011-02-02 129 views
1

我已经读过,如果你将顶点数据对齐到32个字节,一些图形卡会受益。OpenGL - 将顶点结构与32字节对齐?

这通常需要添加填充:

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

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

回答

7

通常(我上传这个数据到VBO)

谢谢,如果源存储器对准从客户机存储器到VBO复制操作可以更快(目的地通常是)。这有点取决于你如何上传到VBO。

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

哦,32个字节和20个字节的填充不会比4个字节的填充更快。重要的是,您拥有两个幂的大小,以便单个完整的顶点提取不会跨越缓存线。

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

+1

我想补充一点,您应该在您的plaftorm上标记差异。每个顶点16字节对于仅位置顶点来说可能是一个很好的选择,但是也可能是无衬垫的数据(导致3个顶点适合2个缓存行而不是2个)可能会更快并且内存不足。 – rotoglup 2011-02-02 21:14:21