跳轉到內容

OpenGL 程式設計/API、庫和縮略詞

來自華夏公益教科書,開放世界的開放書籍

圍繞 OpenGL 有許多技術和縮略詞。以下是它們的組織方式以及做出選擇的具體位置。

(此處介紹的技術可能依賴於任何更低階的技術,而不僅僅是左側的技術。)

低階 -> 高階
顯示卡 OpenGL  WGL (適用於 Windows) EGL GLEW  GLUT  SFML Graphics、ClanLib... (2D)
OpenGL ES GLX (適用於 X11) EAGL (iOS) Glee GLFW  Irrlicht、OGRE、Unity (3D)
WebGL CGL/AGL (適用於 OS X)  SDL、SFML OpenSG、OpenScenegraph...
您在此處的主要選擇 :)
  • 基礎技術是 OpenGL。OpenGL ES 是 OpenGL 的一個受限子集,針對嵌入式平臺(智慧手機等)。特別是 OpenGL ES 2.0 基於 OpenGL 2.0,但完全不包含已棄用的 OpenGL 1.x 功能。GLSL (著色語言) 是一種用於 OpenGL >=2.0 的程式語言,並在 GPU 上執行。WebGL 基於 OpenGL ES 2.0,並透過 JavaScript 在 2011 年的網路瀏覽器中提供。
  • 在它之上,您有一個系統相關的 OpenGL 實現 (WGL、GLX 等)。它提供標準的 glXxx 函式以及將 OpenGL 整合到作業系統顯示中的方法。
  • EGL 應該為嵌入式系統的 OpenGL ES 實現提供一個單一介面,例如 Android 的介面。EGL 仍然需要特定於平臺的程式碼,並且只處理低階的圖形上下文和紋理設定。Apple 的 iPhone 使用一個修改/擴充套件版本,稱為 EAGL。您可以在此級別工作,但通常您的程式的某些部分將特定於一個平臺,而不是可移植的。
  • GLEW 和 GLee 在呼叫 C 中的 OpenGL 基礎函式和擴充套件方面提供了一些幫助;您可以選擇其中一個,因為它們幾乎不會對您的程式碼進行更改,或者甚至都不選擇,並使用 #define GL_GLEXT_PROTOTYPES 用於基本用途。
  • GLUT 以及 GLFW、SDL 和 SFML 提供了一個真正平臺無關的包裝器來啟動 OpenGL 螢幕(完全相同的 C 程式碼)。通常它們還附帶鍵盤、操縱桿以及可能的其他功能的支援。當您進行可移植的、直接的 OpenGL 程式設計或針對特定版本的 OpenGL 時,可以選擇此級別的技術。這些技術往往依賴於完整的 OpenGL,但對 OpenGL ES 和 EGL 的支援正在到來。本書使用此層!
  • 庫可以基於 OpenGL 來提供更高階的功能,例如遊戲 2D 精靈管理(SFML Graphics、ClanLib...),或完整的 3D 引擎(Irrlicht、Ogre...)。它們可能完全遮蔽使用者與 OpenGL 的互動,或者只隱藏細節(例如,只提供對 GLSL 的訪問)。我們可以區分渲染引擎、場景圖和更抽象的遊戲引擎。您的選擇將取決於您正在處理的應用程式型別(2D、3D、場景、遊戲...)。

其他技術

  • DirectX/Direct3D 來自微軟,是 OpenGL 的主要競爭對手。它涵蓋了我們上面看到的幾乎所有層,直到(包括)GLUT/GLFW 層。與 OpenGL 不同,它只在 Windows 平臺上執行,是一種專有技術。
  • OpenCL 用於在顯示卡 GPU 上執行通用(非圖形)程式碼,用於並行程式設計。CUDA 是一種專有的、特定於 Nvidia 的替代方案。
  • Mesa3D 為多種技術提供實現,例如 EGL、OpenGL、OpenGL ES,以及 OpenGL 的軟體實現,可在沒有 3D 卡的情況下工作,因此它跨越了幾個基礎層。它還允許從 GNU/Linux(X11)桌面使用 OpenGL ES。

GLEW 和 GLee 之間的比較(截至 2015 年 8 月)

  • GLee 支援 3.0,而 GLEW 支援 4.5
  • GLee 不需要任何初始化,而 GLEW 需要(glewInit()
  • GLee 沒有釋出與 mingw 相容的二進位制版本(只有與 VC++ 相容的版本),GLEW 也沒有
  • GLee 不會交叉編譯(AFAICS),而 GLEW 會(參見 Windows 設定
  • GLee 似乎沒有維護

硬體支援

[編輯 | 編輯原始碼]

移動裝置/智慧手機

  • 大多數智慧手機都支援 OpenGL ES 1.1。只有少數早期(2009 年)或低端型號,如 HTC G1/Dream/Hero/Magic(Qualcomm MSM72XX GPU)不支援 3D 加速。它在所有 iPhone 和 iPod Touch(PowerVR MBX GPU 和 SGX GPU)中受支援。
  • 大多數在 2010 年中旬之後釋出的智慧手機都支援 OpenGL ES 2.x,但低端型號除外。這包括 iPhone 3GS、iPod Touch 第三代(PowerVR SGX535 GPU)、三星 Galaxy S(PowerVR SGX540 GPU)、HTC Legend、三星 Galaxy Ace(Qualcomm MSM7227 GPU)、Nexus One(Qualcomm Snapdragon 晶片組/Adreno >= 200 GPU)...
  • 螢幕尺寸(以畫素為單位)可能差異很大,從 240x320 到 640x960 不等。
  • Android 有關於 OpenGL 2.0 部署的 統計資料

桌上型電腦

  • 從 2002 年/2003 年開始提供 OpenGL 2.x。當前顯示卡支援 OpenGL 3.x 或 4.x。
  • 截至 2013 年 6 月,用於 GNU/Linux 的自由(自由軟體)驅動程式支援 OpenGL 3.1(參見 Xorg wiki 的 RadeonFeature)。
    • Radeon r600 支援使用 mesa-dri >= 9.0 的 GLSL 1.3,支援使用 Linux 核心 >= 3.6 的 OpenGL 3.0(經過測試),並且顯然支援使用 mesa-dri >= 9.1 和 xorg-xserver >= 1.13 的 OpenGL 3.1(待測試)
$ glxinfo | grep -i opengl
OpenGL version string: 3.0 Mesa 9.1.3
OpenGL shading language version string: 1.30

< OpenGL 程式設計

瀏覽並下載 完整的程式碼
華夏公益教科書