2009-11-20 34 views
2

我注意到OpenGL文檔中紋理座標的默認數據類型是GLfloat,但是我看到許多由有經驗的iphone開發人員編寫的示例代碼使用GLshort或GLbyte。這是一個優化嗎?什麼數據類型應該用於OpenGL ES中的紋理座標?

GLfloat vertices[] = {  
    // Upper left 
    x1, y2, 
    // Lower left 
    x1, y1, 
    // Lower right 
    x2, y1, 
    // Upper right 
    x2, y2, 
}; 
glTexCoordPointer(2, GL_FLOAT, 0, iconSTs); 

GLbyte vertices[] = {  
    // Upper left 
    x1, y2, 
    // Lower left 
    x1, y1, 
    // Lower right 
    x2, y1, 
    // Upper right 
    x2, y2, 
}; 
glTexCoordPointer(2, GL_BYTE, 0, iconSTs); 

回答

3

我不推薦在iPhone上使用byte/short cordinates,尤其是如果你是初學者。只需使用浮游物。它們佔用更多空間,但直到需要以最大速度渲染數千個頂點時,這並不重要。此外,您必須更改紋理矩陣以使用整數紋理座標來表示分數值,否則它們只會指向紋理角(0,1)。這增加了代碼的複雜性。

我相信他們不會更快,至少在iPhone上。由於在單次調用中需要讀取數千個內存帶寬所需的較小內存帶寬,因此它們可能會更快一些。如果你編寫你的第一個引擎,這個優化是不值得的。除非您是一位經驗豐富的引擎編碼人員,並且將硬件推向極限,否則這絕不會成爲代碼中的主要瓶頸,從而帶來可忽略的性能優勢。

其他一些OGL-ES設備的情況可能會有所不同,因爲OpenGL管線部分在軟件中實現,某些設備缺乏FPU,因此無法快速處理浮動。這就是爲什麼一些Android遊戲試圖完全避免浮動類型(在2009年)。

0

GLFloat與GLByte是早晚的事你的頂點採取大小。
在OpenGL中,您可以指定哪個是幾何圖形的基礎數據類型。
我沒有在iphone上編程,但我很確定他們這樣做是爲了節省空間(也許計算時間)。
浮點數是4個字節,短是2個字節,字節是... 1個字節:)
當然,你鬆散的精度和較少的位。