2011-02-02 127 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