引文
OpenGL是一個圖形API,API通俗的說就是一堆函數(shù),我們可以通過調用這些函數(shù)來做一些事情,而OpenGL就是用來讓我們做一些關于圖形方面的事情;顯卡可以更好的繪制圖形,而我們需要用一些API來操縱顯卡,OpenGL就是這類API中的一個,其他的還有Direct3D、Vulkan、Metal等。
這里要糾正一些誤解,很多人稱OpenGL為“庫”、“引擎”或者“框架”,這是不對的,OpenGL的核心是一種規(guī)范,本身沒有任何確定的代碼,沒有任何實現(xiàn),它只是告訴大家,某個函數(shù)應該存在,需要某些參數(shù),需要返回某個值,所以OpenGL也不需要下載,它本身只是一個規(guī)范,平時我們用的OpenGL,是由顯卡生產(chǎn)廠商實現(xiàn)的,比如NVIDIA或者AMD顯卡的驅動程序就包含了各自對OpenGL的實現(xiàn)。第二個誤解就是OpenGL是開源的,它其實不是開源的,我們看不到它的源碼,因為它是由顯卡廠商們實現(xiàn)的,他們顯然不會將顯卡驅動的源碼開源。
OpenGL是跨平臺的,你可以只寫一份OpenGL代碼就可以在Windows、Mac、Linux、IOS、安卓系統(tǒng)上運行,但這不意味著OpenGL就比Direct3D(Windows專用)、Metal(蘋果系列專用)更好,它只是用來學習的最好的API,實際上你可以底層用OpenGL,將實際的API接口寫的像Direct3D。
老版本的OpenGL和現(xiàn)代OpenGL的區(qū)別關鍵在于我們對GPU的控制權,OpenGL在90年代發(fā)布,那時GPU并不是靈活的并且可編程的,我們不能隨心所欲的操控它,但現(xiàn)在顯卡產(chǎn)商給了我們更多的控制權,這讓我們可以進一步地去優(yōu)化顯卡的使用;其中最重要就是著色器,它允許我們在GPU上寫程序,一般情況下我們寫的程序都是運行在CPU上的,但當我們針對圖形處理的時候,我們可以將一些程序放到GPU上用來更精確的控制GPU,這些程序在GPU上運行的更快。