我得到Open GL需要使用數字,但爲什麼不只是使用常規整數和浮點數或已存在的包裝類(以OpenGL的整個世界爲準)。除了名稱之外,還有一個在Open GL中獨佔使用的區別嗎?或者它們幾乎是不一樣的名稱?爲什麼GLint和GLfloat?
7
A
回答
19
因爲int是32位系統上的32位和64位系統上的64位,所以即使只是「int」也不是一個通用的概念。請記住,運行圖形代碼的硬件是與您的cpu不同的硬件,並且出現對新類型的需求。通過使用自己的typedef,OpenGL可以確保在將數據發送到圖形卡時正確的位數被打包。
這將有可能通過轉換函數來抽象出「不同的整數」的混亂性,但是這會導致一個性能損失,當你談論每個單一數字時,通常是不可接受的顯卡。
tl; dr當使用「int」時,您正在考慮處理器的硬件。在使用「GLInt」時,您需要考慮圖形卡的硬件。
編輯:正如在評論中指出的,在64位處理器上,出於兼容性原因,int
可以(也可能是)32位。歷史上,通過8,16和32位硬件,它一直是處理器的原生尺寸,但從技術上講,無論編譯器在創建機器代碼時使用的是什麼樣的感覺。道具到@Nicol Bolas和@Mark Dickinson
相關問題
- 1. 爲什麼GLfloat需要全局範圍?
- 2. 將GLfloat []數組轉換爲GLfloat * array
- 3. 爲什麼OpenGL紋理參數GLint而不是GLenum?
- 4. Open GL ES - GLenum vs Glint和GLint與GLsizei的區別
- 5. 從浮點數轉換爲Glint
- 6. 初始化GLfloat
- 7. OpenGL ES 2.0 2D投影矩陣,將GLfloat(*)[4]錯誤轉換爲GLfloat
- 8. OpenGL Vertex Value Range(GLFloat)
- 9. Android的OpenGL的 - GLfloat
- 10. 傳遞GLfloat作爲均勻失敗(IOS)
- 11. 特定於API的類型定義(如GLsizei GLint GLvoid)的用途是什麼?
- 12. glfloat python的語法錯誤?
- 13. Opengl - GLfloat不被識別
- 14. 生成隨機GLfloat值
- 15. GLfloat動態數組聲明
- 16. lwjgl裏面有GLfloat嗎?
- 17. 程序輸出什麼和爲什麼?
- 18. 什麼是clojure.lang.Var.getRawRoot和它爲什麼叫?
- 19. HttpClient是什麼和爲什麼?
- 20. Bloomfilter和Cassandra =爲什麼使用和爲什麼散列幾次?
- 21. 測試用例,「什麼時候」,「什麼」和「爲什麼」?
- 22. DataMapper - 爲什麼「有」和「belongs_to」?
- 23. 爲什麼NSEnumerationReverse和不NSEnumerationForward
- 24. 爲什麼`mask_`中和`timeout`?
- 25. 爲什麼OpenJDK的和oracleJDK
- 26. 爲什麼要按位和?
- 27. getElementById和null - 爲什麼?
- 28. 爲什麼red5和tomcat?
- 29. 爲什麼os.path使用'\'和'/'?
- 30. 爲什麼有.shared.GWT和.client.GWT?
「int(在這裏是簡單過分簡化)32位系統上的32位和64位系統上的64位」注意:這不一定是正確的。編譯器決定'int'有多大。它可能在64位系統上爲32位。它可能不會。 –
@NicolBolas:+1。事實上,我發現很難想象任何* 64位系統,其中int是64位。我所知道的所有常見系統都有32位整數。至少,如果我們談論的是C/C++整數,那就是。我似乎記得一些古代Crays有64位整數。 –
你知道,這是真的,謝謝你的評論 - 我正在考慮將int作爲「原生地址大小」,最近花了一些時間嵌入到內存中,但事實證明int在16位處理器上是16位, 32位爲32位,32位爲64位。出於兼容性原因,它保持爲32位。我剛剛在我的x86 MBP上驗證了這一點。這強調了int可以是編譯器希望的任何東西,從而強化了需要適合顯卡硬件的健壯類型的觀點,但值得評論和編輯。幹得不錯! – Matt