OpenGL筆記之一 開學

hunter_wyh發表於2018-08-31

OpenGL

OpenGL本身並不是一個API,==它僅僅是一個由Khronos組織制定並維護的規範==。OpenGL規範嚴格規定了每個函式該如何執行,以及它們的輸出值。至於內部具體每個函式是如何實現的,將由OpenGL庫的開發者自行決定。(這裡開發者是指編寫OpenGL庫的人,實際的OpenGL庫的開發者通常是顯示卡的生產商。)

因為OpenGL規範並沒有規定實現的細節,具體的OpenGL庫允許使用不同的實現,只要其功能和結果與規範相匹配。這也意味著任何時候OpenGL庫表現的行為與規範規定的不一致時,基本都是庫的開發者留下的bug。

有興趣的讀者可以找到OpenGL3.3的規範文件

核心模式與立即渲染模式

早期的OpenGL使用立即==渲染模式==,這個模式下繪製圖形很方便,但是效率太低。因此從OpenGL3.2開始,規範文件開始廢棄立即渲染模式,並鼓勵開發者在OpenGL的==核心模式==(Core-profile)下進行開發。

擴充套件

OpenGL的一大特性就是對擴充套件的支援,當一個顯示卡公司提出一個新特性或者渲染上的大優化,通常會以==擴充套件==的方式在驅動中實現。

如果一個程式在支援這個擴充套件的顯示卡上執行,開發者可以使用這個擴充套件提供的一些更先進更有效的圖形功能。通過這種方式,開發者不必等待一個新的OpenGL規範面世,就可以使用這些新的渲染特性了,只需要簡單地檢查一下顯示卡是否支援此擴充套件。

狀態機

OpenGL自身是一個巨大的==狀態機==:一系列的變數描述OpenGL此刻應當如何執行。OpenGL的狀態通常被稱為OpenGL==上下文==。我們通常使用如下途徑去更改OpenGL狀態:設定選項,操作緩衝。最後,我們使用當前OpenGL上下文來渲染。

物件

OpenGL庫是用==C語言==寫的,同時也支援多種語言的派生,但其核心仍是一個C庫。由於C的一些語言結構不易被翻譯到其它的高階語言,因此OpenGL開發的時候引入了一些抽象層。“物件(Object)”就是其中一個。

在OpenGL中一==個物件==是指一些選項的集合,它代表OpenGL狀態的一個子集。(類似於C語言的結構體)

附加資源

相關文章