EGL的基本使用流程

轉(zhuǎn)載 https://blog.csdn.net/weixin_35127779/article/details/86540173

一彼念、相關(guān)概念:

1.OpenGL是一套繪圖函數(shù)的標準风科,OpenGL ES是OpenGL中針對嵌入式系統(tǒng)的一套函數(shù)子集莲兢。

2.EGL:通俗上講巩掺,OpenGL是一個操作[GPU]的API偏序,它通過驅(qū)動向GPU發(fā)送相關(guān)指令,控制圖形渲染管線狀態(tài)機的運行狀態(tài)胖替。但OpenGL需要本地視窗系統(tǒng)進行交互研儒,這就需要一個中間控制層,最好與平臺無關(guān)独令。EGL——因此被獨立的設(shè)計出來端朵,它作為OpenGL ES和本地窗口的橋梁。 EGL 是 OpenGL ES(嵌入式)和本地 平臺視窗系統(tǒng)之間的接口燃箭。

3.GLUT:是基本的窗口界面冲呢,是獨立于gl和glu的,如果不喜歡用glut可以用MFC和Win32窗口等代替招狸,但是glut是跨平臺的敬拓,這就保證了我們編出的程序是跨平臺的邻薯,如果用MFC或者Win32只能在windows操作系統(tǒng)上使用。選擇OpenGL的一個很大原因就是因為它的跨平臺性乘凸,所以我們可以盡量的使用glut庫厕诡。

3.glut

二、EGL使用流程

1.標準 EGL 數(shù)據(jù)類型如下所示:

EGLBoolean ——EGL_TRUE =1, EGL_FALSE=0
EGLint ——int 數(shù)據(jù)類型
EGLDisplay ——系統(tǒng)顯示 ID 或句柄营勤,可以理解為一個前端的顯示窗口
EGLConfig ——Surface的EGL配置灵嫌,可以理解為繪制目標framebuffer的配置屬性
EGLSurface ——系統(tǒng)窗口或 frame buffer 句柄 ,可以理解為一個后端的渲染目標窗口葛作。
EGLContext ——OpenGL ES 圖形上下文寿羞,它代表了OpenGL[狀態(tài)機] 如果沒有它,OpenGL指令就沒有執(zhí)行的環(huán)境进鸠。

下面幾個類型比較復雜稠曼,通過例子可以更深入的理解。這里要說明的是這幾個類型在不同平臺其實現(xiàn)是不同的客年,EGL只提供抽象標準霞幅。

NativeDisplayType——本地系統(tǒng)顯示類型,標識你所開發(fā)設(shè)備的物理屏幕
NativeWindowType ——本地系統(tǒng)窗口緩存類型量瓜,標識系統(tǒng)窗口
NativePixmapType ——本地系統(tǒng) frame buffer司恳,可以作為 Framebuffer 的系統(tǒng)圖像(內(nèi)存)數(shù)據(jù)類型,該類型只用于離屏渲染.

2 OpenGL ES的初始化過程(EGL初始化)如下圖所示意:

Display → Config → Surface
↑
Context
↑
Application → OpenGL Command
2.1. 獲取Display绍傲。

獲得Display要調(diào)用 eglGetDisplay扔傅,參數(shù)一般為 EGL_DEFAULT_DISPLAY 。

EGLboolean eglGetDisplay(NativeDisplay dpy)
2.2. 初始化egl烫饼。

調(diào)用 eglInitialize猎塞,該函數(shù)會進行一些內(nèi)部初始化工作,并傳回EGL版本號(major.minor)杠纵。

EGLboolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
2.3. 選擇Config荠耽。

Config實際指的是FrameBuffer的參數(shù),

一般用 eglChooseConfig 其中attr_list是以EGL_NONE結(jié)束的參數(shù)數(shù)組比藻,通常以id,value依次存放铝量,對于個別標識性的屬性可以只有 id,沒有value银亲。

EGLboolean eglChooseConfig(EGLDisplay dpy, const EGLint * attr_list, EGLConfig * config, EGLint config_size, EGLint *num_config)

另一個辦法是用 eglGetConfigs 來獲得所有config慢叨。

EGLboolean eglGetConfigs(EGLDisplay dpy, EGLConfig * config, EGLint config_size, EGLint *num_config) 

這兩個函數(shù)都會返回不多于config_size個Config,結(jié)果保存在config[]中务蝠,系統(tǒng)的總Config個數(shù)保存 在num_config中拍谐。

可以利用eglGetConfig()中間兩個參數(shù)為0來查詢系統(tǒng)支持的Config總個數(shù)。
Config有眾多的Attribute,這些Attribute決定FrameBuffer的格式和能力轩拨,通過 eglGetConfigAttrib () 來讀取力穗,但不能修改。

2.4 構(gòu)造Surface气嫁。

Surface實際上就是一個FrameBuffer当窗,也就是渲染目的地,通過 eglCreateWindowSurface 來創(chuàng)建一個可實際顯示的Surface寸宵。

EGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig confg, NativeWindow win, EGLint *cfg_attr)

系統(tǒng)通常還支持另外兩種Surface:PixmapSurface和PBufferSurface崖面,這兩種都不是可顯示的Surface,PixmapSurface是保存在系統(tǒng)內(nèi)存中的位圖梯影,PBuffer則是保存在顯存中的幀巫员。

對于這兩種surfaceAndroid系統(tǒng)中,支持PBufferSurface甲棍。
Surface也有一些attribute简识,基本上都可以故名思意,

EGL_HEIGHT EGL_WIDTH EGL_LARGEST_PBUFFER EGL_TEXTURE_FORMAT EGL_TEXTURE_TARGET EGL_MIPMAP_TEXTURE EGL_MIPMAP_LEVEL感猛,

通過eglSurfaceAttrib()設(shè)置七扰、eglQuerySurface()讀取。

2.5 創(chuàng)建Context陪白。

OpenGL ES的pipeline從程序的角度看就是一個狀態(tài)機颈走,有當前的顏色、紋理坐標咱士、變換矩陣立由、絢染模式等一大堆狀態(tài),這些狀態(tài)作用于OpenGL 程序提交的頂點坐標等圖元從而形成幀緩沖內(nèi)的像素序厉。在OpenGL的編程接口中锐膜,Context就代表這個狀態(tài)機,OpenGL API程序的主要工作就是向Context提供圖元弛房、設(shè)置狀態(tài)道盏,偶爾也從Context里獲取一些信息。
可以用

EGLContext eglCreateContext(EGLDisplay dpy, EGLSurface write, EGLSurface read, EGLContext * share_list)

來創(chuàng)建一個Context庭再。

2.6EGL變量之間的綁定
boolean eglMakeCurrent(EGLDisplay display, EGLSurface draw, EGLSurface read, EGLContext context)

該接口將申請到的display捞奕,draw(surface)和 context進行了綁定牺堰。也就是說拄轻,在context下的OpenGLAPI指令將draw(surface)作為其渲染最終目的地。而display作為draw(surface)的前端顯示伟葫。調(diào)用后恨搓,當前線程使用的EGLContex為context。

2.7. 繪制。

應用程序通過OpenGL API進行繪制斧抱,一幀完成之后常拓,調(diào)用 eglSwapBuffers 來顯示。

eglSwapBuffers(EGLDisplay dpy, EGLContext ctx)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辉浦,一起剝皮案震驚了整個濱河市弄抬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宪郊,老刑警劉巖掂恕,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異弛槐,居然都是意外死亡懊亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門乎串,熙熙樓的掌柜王于貴愁眉苦臉地迎上來店枣,“玉大人,你說我怎么就攤上這事叹誉⊙炝剑” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵长豁,是天一觀的道長甩卓。 經(jīng)常有香客問我,道長蕉斜,這世上最難降的妖魔是什么逾柿? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮宅此,結(jié)果婚禮上机错,老公的妹妹穿的比我還像新娘。我一直安慰自己父腕,他們只是感情好弱匪,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著璧亮,像睡著了一般萧诫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枝嘶,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天帘饶,我揣著相機與錄音,去河邊找鬼群扶。 笑死及刻,一個胖子當著我的面吹牛镀裤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缴饭,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼暑劝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颗搂?” 一聲冷哼從身側(cè)響起担猛,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丢氢,沒想到半個月后毁习,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡卖丸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年纺且,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稍浆。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡载碌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衅枫,到底是詐尸還是另有隱情嫁艇,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布弦撩,位于F島的核電站步咪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏益楼。R本人自食惡果不足惜猾漫,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望感凤。 院中可真熱鬧悯周,春花似錦、人聲如沸陪竿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽族跛。三九已至闰挡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間礁哄,已是汗流浹背长酗。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姐仅,地道東北人花枫。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像掏膏,于是被迫代替她去往敵國和親劳翰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 一. EGL 介紹 ??OpenGL是一個操作GPU的API馒疹,它通過驅(qū)動向GPU發(fā)送相關(guān)指令佳簸,控制圖形渲染管線狀...
    Magic11閱讀 2,719評論 1 3
  • EGL 介紹 OpenGL-ES 是一個操作GPU的圖像API標準,它通過驅(qū)動向GPU發(fā)送相關(guān)圖形指令颖变,控制圖形渲...
    特立獨行的佩奇閱讀 1,475評論 0 0
  • 部分內(nèi)容摘自其他博客生均,請見最下[參考資料] 首先來看看Android官方對EGL的解釋: OpenGL ES 定義...
    Programer_OCT閱讀 19,513評論 2 13
  • EGL 介紹 通俗上講,OpenGL是一個操作GPU的API腥刹,它通過驅(qū)動向GPU發(fā)送相關(guān)指令马胧,控制圖形渲染管線狀態(tài)...
    Damon_He閱讀 4,671評論 0 5
  • 上下文環(huán)境搭建就像前面提到的,OpenGL不負責窗口管理及上下文環(huán)境管理衔峰,該職責將由各個平臺或者設(shè)備自行完成佩脊。為了...
    凌煙醉臥閱讀 1,362評論 0 3