天天看點

EGL - Embedded-System Graphics Library/ OpenGL ES Native Platform Graphics Interface

工作需要,得把以前學的計算機圖形學的知識撿回來,并學會以前沒怎麼接觸的shader。最近在看Programming with OpenGL ES 2.0。做一下筆記思路會清晰些(其實就是翻譯一下書本章節并結合wiki上的一些知識進行叙述)。

EGL 全稱有不同叫法,最初叫OpenGL ES Native Platform Graphics Interface,翻譯過來就是OpenGL ES原生平台圖形接口。

後來又叫Kronos Native Platform Graphics Interface(其實是一回事),X.Org又稱EGL為Embedded-System Graphics Library.

簡單來說,EGL就是渲染的API(比如OpenGL, OpenGL ES等)和原生視窗系統(Native Widnow System)之間的接口。

OpenGL ES 指令要得以執行,需要兩樣東西:渲染環境(rendering context)和繪圖面(drawing/rendering surface)。

渲染環境(rendering context) 儲存OpenGL ES相關的狀态。

繪圖面(drawing surface)就是圖元(primitive)所畫到的地方。Drawing surface指定了渲染所需的buffer種類,比如color buffer,depth buffer和stencil buffer,以及每一個所需的buffer位深度(bit depth)。

OpenGL ES的API沒有論及一個渲染環境是如何建立的,也沒有說這個渲染環境是如何跟原生視窗系統連接配接的。因為OpenGL ES渲染部分的實作不需要提供EGL。而EGL就是這樣一個接口,讓這API和特定的原生視窗系統連接配接起來。EGL要參考特定的平台提供商的文檔。

一個使用EGL的OpenGL ES應用在開始渲染前需要做三件事情:

1. 查詢裝置上可用的顯示器,并初始化。

2. 建立一個渲染的Surface。這個surface是在EGL中建立的。這個surface分為兩類:on-screen和off-screen。on-screen的surface是跟原生視窗系統相連的,也就是on-screen的surface是用于顯示的。而off-screen的surface是可渲染的但是不顯示的像素緩存(pixel buffer),這種surface可用于渲染到一個紋理(texture)并被各種Khrono的API共享。

3. 建立一個渲染的環境(context)。同樣的,這個渲染環境也是用EGL建立的。在渲染真正開始前,這個context需要跟第二步的surface連接配接。

EGL的API除了實作了上述三個步驟的内容,還有其他的功能:電源管理(power management),在一個程序中對多個渲染環境的支援、對象在一個程序中多個渲染環境中的共享(如紋理或頂點緩存)等。

繼續閱讀