2014-10-27 46 views
0

我應該爲頂點數據使用哪種類型的浮點數?有一堆可供選擇。 Glfloat,float,float32等在swift OpenGL中使用哪種類型的float?

+0

它們將全部相同(每個類型都有相同的typedefed其他)大部分時間 – 2014-10-27 21:27:24

回答

1

iOS GPU硬件對單精度浮點數據效果最佳。此外,許多高級庫(例如GLKit,SceneKit)使用包含32位浮點數的數據結構作爲向量,矩陣等。

至於要使用哪種類型的名稱,請記住Swift不會執行自動類型轉換。因此,在C中,您可以在代碼中使用float值並將它們傳遞給OpenGL API,但在Swift中,您必須將它們隱式轉換爲由API使用的類型(使用GLfloat(value))。最好只使用GLfloat作爲自己的數據,所以你不必插入轉換。

即使您僅開發Apple平臺(因爲您使用的是Swift),使用GLfloat也可以確保您使用OpenGL規範要求的任何數據類型 - 如果使用其他類型名稱爲了今天指定相同的數據大小/格式,您將依靠這個名稱來發現未來的意義。 (當然,這些特定的Swift數據類型似乎並不是所有可能改變的,但總的來說,最好依靠明確的API合同而不是隱式匹配。)

+0

事實上,在iOS上有一個類型:'CGFloat',Apple編寫的一些示例軟件使用...如果您的目標是64位版本的iOS,則此類型爲64位雙精度,否則是32位單精度。蘋果公司自己假設這種類型在寫他們的示例代碼時總是會是單精度的32位。不用說,如果您將一個指向'CGFloat'的指針傳遞給一個需要'GLfloat'的函數,那麼OpenGL ES並不一致:P – 2014-10-27 21:55:49

0

對於OpenGL,在這種情況下,您應該使用OpenGL數據類型 - GLfloat,因爲它們保證是GL實現在每個平臺上使用的正確類型。實際上,在幾乎所有情況下,GLfloat都將是32位單精度浮點格式。