2012-09-07 57 views
7

我得到Open GL需要使用數字,但爲什麼不只是使用常規整數和浮點數或已存在的包裝類(以OpenGL的整個世界爲準)。除了名稱之外,還有一個在Open GL中獨佔使用的區別嗎?或者它們幾乎是不一樣的名稱?爲什麼GLint和GLfloat?

回答

19

因爲int是32位系統上的32位和64位系統上的64位,所以即使只是「int」也不是一個通用的概念。請記住,運行圖形代碼的硬件是與您的cpu不同的硬件,並且出現對新類型的需求。通過使用自己的typedef,OpenGL可以確保在將數據發送到圖形卡時正確的位數被打包。

這將有可能通過轉換函數來抽象出「不同的整數」的混亂性,但是這會導致一個性能損失,當你談論每個單一數字時,通常是不可接受的顯卡。

tl; dr當使用「int」時,您正在考慮處理器的硬件。在使用「GLInt」時,您需要考慮圖形卡的硬件。

編輯:正如在評論中指出的,在64位處理器上,出於兼容性原因,int可以(也可能是)32位。歷史上,通過8,16和32位硬件,它一直是處理器的原生尺寸,但從技術上講,無論編譯器在創建機器代碼時使用的是什麼樣的感覺。道具到@Nicol Bolas和@Mark Dickinson

+4

「int(在這裏是簡單過分簡化)32位系統上的32位和64位系統上的64位」注意:這不一定是正確的。編譯器決定'int'有多大。它可能在64位系統上爲32位。它可能不會。 –

+1

@NicolBolas:+1。事實上,我發現很難想象任何* 64位系統,其中int是64位。我所知道的所有常見系統都有32位整數。至少,如果我們談論的是C/C++整數,那就是。我似乎記得一些古代Crays有64位整數。 –

+1

你知道,這是真的,謝謝你的評論 - 我正在考慮將int作爲「原生地址大小」,最近花了一些時間嵌入到內存中,但事實證明int在16位處理器上是16位, 32位爲32位,32位爲64位。出於兼容性原因,它保持爲32位。我剛剛在我的x86 MBP上驗證了這一點。這強調了int可以是編譯器希望的任何東西,從而強化了需要適合顯卡硬件的健壯類型的觀點,但值得評論和編輯。幹得不錯! – Matt