簡介
這篇文章描述了OpenGL ES的圖形處理體系:什么是OpenGL ES,它如何工作,怎樣去實現它。我們假設讀者都了解一些計算機圖形學的基礎。這意味著要熟悉計算機圖形運算的本質以及熟悉基本的圖形硬件和相關知識。
1.1 OpenGL ES2.0 手冊中標注的解釋
在段落中,洋紅色標注的是一些最近的草稿的變化。注釋和問題用藍色標注。
1.2 什么是OpenGL ES圖形系統
OpenGL是圖形硬件的軟件接口。這些接口由一系列的程序和功能組成,允許程序員具現化物體以及操作產生高質量的圖形圖像,尤其是一些三維的彩色物體。
大多數的OpenGL ES要求圖形硬件包含framebuffer。許多OpenGL ES畫物體都是通過調用畫點,線,多邊形來完成的,但是某些情況下,還是需要依靠framebuffer的存在才能完成(例如再反鋸齒和紋理化打開的時候)。更多的,一些OpenGL ES需要在操作framebuffer的時候特別小心。
OpenGL ES2.0是基于OpenGL2.0圖形系統的,但它主要為嵌入式設備和移動手機的圖形硬件設計。它刪除和裁剪了大量的接口,同時添加了一些新的功能。OpenGL ES和OpenGL的不同將不會再這里討論。詳細的總結會在相關文檔OpenGL ES Common Profile Specification 2.0 (Difference Specifica- tion)中出現。
1.3從編程者的角度看OpengGL ES
對于編程者來說,OpenGL 是命令的集合,允許指定2D或者3D的集合對象,控制如何把對象渲染到framebuffer中。OpenGL ES提供了“immediate-mode”接口,這意味著指定對象就會畫出來。
一個典型的使用OpenGL ES的程序都是從調用打開窗口開始,程序將把圖像畫在窗口的framebuffer中。然后,調用申請OpenGL ES context和窗口相關聯。這些步驟執行都會使用一些和平臺對應的API,比如Khronos Native Platform Graphics Interface(EGL),有獨立的文檔。只要context被創建,編程者就會完全自由的對待OpenGL ES的命令。一些調用是用來畫簡單的幾何圖形(點,線,多邊形),另外一些影響這些圖元的渲染,包括如何光照,上色,如何從使用者的2D或者3D模型空間映射到2D的屏幕上。也有一些命令是直接作用在framebuffer上的,比如讀取像素。
1.4從實現者的角度看OpenGL ES
對于實現者來說,OpenGL ES是一系列命令的集合,作用于圖形硬件的操作。如果硬件僅僅由可尋址的framebuffer組成,OpenGL ES一定會被全部實現在CPU上。比較典型的場景,從渲染2D的線,多邊形到比較復雜的矩陣轉換的浮點運算處理能力,和計算幾何數據,圖形硬件可以由不同等級的圖形加速器構成。OpenGL ES實現者的任務就是給CPU 提供軟件接口,同時為每個工作在CPU和圖形硬件之間的OpenGL ES命令分離工作。這種分離必須非常適合圖形硬件,包括要考慮到OpenGL ES調用時的最佳性能。
1.5我們的角度
我們把OpenGL ES當作一個狀態機,控制著一系列的指定的畫圖操作。這種模型就導致,我們需要一個詳細的操作指導,同時滿足編程和實現。一種實現將會產生遵從某種具體方法的結果,但是也有一些特殊的計算可以使得更有效率。
1.6配套文檔
這份說明書需要和配套文檔The OpenGL ES Shading Language一起讀。這份文檔定義了用來描述頂點和片段著色器的編程語言的語法和語義。一些章節將會引用Shading Language中定義的的概念以及相關的內容,比如語言變量。
OpenGL ES 2.0 的實現保證了shading lanuage1.0版本的兼容,實際版本支持可以再6.1.5章節查詢。
1.6.1窗口系統綁定
OpenGL ES需要配套的API來創建和管理圖像上下文,窗口的渲染,以及其他的在該文檔中提到的資源。
Khronos Native Platform Graphics Interface 或者叫“EGL Specification”描述了EGL API,用來在手機和嵌入式設備上使用OpenGL ES。EGL說明文檔在Khronos Extension Registry的官方網址可以查看,http://www.khronos.org/registry/egl 。
Khronos強烈建議OpenGL ES的實現同樣支持EGL,但是一些實現需要有選擇的提供有相同功能的其他平臺或者其他的相應的API。