[CG從零開始] 2. 徹底弄清OpenGL 涉及的工具庫

1. 跨平臺窗口管理

爲了將 OpenGL 渲染的內容在操作系統的窗口中顯示出來,我們不可避免的需要調用操作系統的 API 創建窗口、渲染上下文等等,每個操作系統的 API 都不一樣,爲了減少繁瑣工作以及爲了程序的可以移植性,有一些工具庫幫助我們完成了這些事情,使得我們不需要和 native API 打交道。

1.1 glut

OpenGL Utility Toolkit (GLUT) 是一個用於 OpenGL 程序的實用程序庫,主要執行與主機操作系統的系統級 I/O。執行的功能包括窗口定義、窗口控制以及鍵盤和鼠標輸入的監控。還提供了用於繪製許多幾何圖元(實體和線框模式)的例程,包括立方體、球體和猶他茶壺。GLUT 對創建彈出菜單也有一些有限的支持。

GLUT 的兩個目標是允許在操作系統之間創建相當可移植的代碼(GLUT 是跨平臺的)並使學習 OpenGL 更容易。在使用 GLUT 時開始使用 OpenGL 編程通常只需要幾行代碼,並且不需要了解操作系統特定的窗口 API。

1.2 freeglut

freeglut 可以認爲是 glut 的替代品,glut 已經不在維護和更新了,已經太老了,而且 glut 的許可不許修改併發布,所以後面有了 freeglut,freeglut 支持的操作系統更加完善,而且不斷在更新、維護。

1.3 glfw

GLFW 是一個開源的多平臺庫,用於桌面上的 OpenGL、OpenGL ES 和 Vulkan 開發。它提供了一個簡單的 API,用於創建窗口、上下文和表面,接收輸入和事件。GLFW 是用 C 語言編寫的,支持 Windows、macOS、X11 和 Wayland。glfw 很年輕,而且很活躍在 github 已經有了 3.9k+ star, 可以來代替 glut 和 freeglut。

2. OpenGL 函數加載庫

OpenGL 加載庫是一個在運行時加載指向 OpenGL 函數、核心以及擴展的指針的庫。這是在大多數平臺上從 1.1 以上的 OpenGL 版本訪問函數所必需的。擴展加載庫還抽象出不同平臺上加載機制之間的差異。

大多數擴展加載庫不需要包含 gl.h。相反,它們提供了自己必須使用的頭文件。大多數擴展加載庫使用代碼生成來構造加載函數指針和包含的頭文件的代碼。

運行時加載可以進行 fallback 機制,例如某個能力當前平臺不支持,那麼可以降級到另一個功能上。

2.1 glew

OpenGL Extension Wrangler Library (GLEW) 是一個跨平臺的開源 C/C++ 擴展加載庫。GLEW 提供了有效的運行時機制來確定目標平臺支持哪些 OpenGL 擴展。OpenGL 核心和擴展功能在單個頭文件中公開。GLEW 已經在各種操作系統上進行了測試,包括 Windows、Linux、Mac OS X、FreeBSD、Irix 和 Solaris。

2.2 glad

GLAD 繼 GL3W,GLEW之後,是一個比較獲取的函數加載庫,提供在線生成服務,可以選擇自己需要的能力。官方網址爲https://glad.dav1d.de/

2.3 結論

作爲實驗、學習、能力驗證等,使用 glfw + glad 即可滿足需求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章