2012-04-10 49 views
0

假設我正在定義一個頂點結構。通過將頂點的RGBA顏色封裝到一個無符號整型中,我可以保持較小的頂點結構。因此:4浮點顏色比4字節顏色快嗎?

struct Vertex 
{ 
    float pos[3]; 
    float normal[3]; 
    float texcoord[2]; 
    unsigned int color; // RGBA 
}; 

然而,當頂點到達我的頂點着色器,它將被轉換成4-float值:在一個GLSL或vec4在HLSL一個float4。推測這種類型轉換在GPU上需要一些時間。

因此,將頂點的顏色屬性定義爲4浮點型會更快嗎,從而避免轉換?

... 
float color[4]; 
... 

或者將這種顏色的較大內存的大小使GPU緩存效率較低,導致渲染?

+1

你試過了嗎? – harold 2012-04-10 17:01:31

回答

4

現代GPU具有專用硬件,用於在加載時解包壓縮格式,因此轉換實際上是免費的。減少的內存帶寬需求和更有效的頂點緩存使用將提高性能,因此您應該儘可能嚴密地打包所有頂點屬性,同時仍然保持足夠的精度以滿足您的需求。