OpenGL ES系列 之 基本 1 初始化EGL

2021-04-21 11:55:14 字數 1958 閱讀 7811

1. 獲取display。

display代表顯示器,在有些系統上可以有多個顯示器,也就會有多個display。獲得display要呼叫eglboolean eglgetdisplay(nativedisplay dpy),引數一般為 egl_default_display 。該引數實際的意義是平台實現相關的,在x-window下是xdisplay id,在ms windows下是window dc。

2. 初始化egl。

呼叫 eglboolean eglinitialize(egldisplay dpy, eglint *major, eglint *minor),該函式會進行一些內部初始化工作,並傳回egl版本號(major.minor)。

3. 選擇config。

所為config實際指的是framebuffer的引數,在ms windows下對應於pixelformat,在x-window下對應visual。一般用eglboolean eglchooseconfig(egldisplay dpy, const eglint * attr_list, eglconfig * config, eglint config_size, eglint *num_config),其中attr_list是以egl_none結束的引數陣列,通常以id,value依次存放,對於個別標識性的屬性可以只有 id,沒有value。另乙個辦法是用eglboolean eglgetconfigs(egldisplay dpy, eglconfig * config, eglint config_size, eglint *num_config) 來獲得所有config。這兩個函式都會返回不多於config_size個config,結果儲存在config中,系統的總config個數儲存 在num_config中。可以利用eglgetconfig()中間兩個引數為0來查詢系統支援的config總個數。

config有眾多的attribute,這些attribute決定framebuffer的格式和能力,通過eglgetconfigattrib ()來讀取,但不能修改。

4. 構造su***ce。

su***ce實際上就是乙個framebuffer,通過 eglsu***ce eglcreatewindowsu***ce(egldisplay dpy, eglconfig confg, nativewindow win, eglint *cfg_attr) 來建立乙個可實際顯示的su***ce。系統通常還支援另外兩種su***ce:pixmapsu***ce和pbuffersu***ce,這兩種都不 是可顯示的su***ce,pixmapsu***ce是儲存在系統記憶體中的點陣圖,pbuffer則是儲存在視訊記憶體中的幀。

su***ce也有一些attribute,基本上都可以故名思意, egl_height egl_width egl_largest_pbuffer egl_texture_format egl_texture_target egl_mipmap_texture egl_mipmap_level,通過eglsu***ceattrib()設定、eglquerysu***ce()讀取。

5. 建立context。

opengl的pipeline從程式的角度看就是乙個狀態機,有當前的顏色、紋理座標、變換矩陣、絢染模式等一大堆狀態,這些狀態作用於程式提交的頂點 座標等圖元從而形成幀緩衝內的畫素。在opengl的程式設計介面中,context就代表這個狀態機,程式的主要工作就是向context提供圖元、設定狀 態,偶爾也從context裡獲取一些資訊。

用eglcontext eglcreatecontext(egldisplay dpy, eglsu***ce write, eglsu***ce read, eglcontext * share_list)來建立乙個context。

6. 繪製。

應用程式通過opengl api進行繪製,一幀完成之後,呼叫eglswapbuffers(egldisplay dpy, eglcontext ctx)來顯示。

整合 OpenGLES 渲染管線系列(1)

在opengl中,任何事物都在3d空間中,而螢幕和視窗卻是2d畫素陣列,這導致opengl的大部分工作都是關於把3d座標轉變為適應你螢幕的2d畫素。3d座標轉為2d座標的處理過程是由opengl的圖形渲染管線管理的。圖形渲染管線是一系列按序處理操作,可以被劃分為兩個主要部分 第一部分把你的3d座標轉...

OpenGL ES系列之0 建立Xcode專案

為iphone建立乙個opengl es的xcode專案是很容易的事,特別是在蘋果公司的sdk發布時引入了模板的概念後。我們所需要做的只是在適當的地方快速而簡單的加入 這就是我們今天的主題。好,我們假定你肯能以前已經在哪看過這個模板或執行過用這個模板建立的專案。我們說要做的就是移除那個旋轉的彩色正方...

OpenGL ES系列之0 建立Xcode專案

為iphone建立乙個opengl es的xcode專案是很容易的事,特別是在蘋果公司的sdk發布時引入了模板的概念後。我們所需要做的只是在適當的地方快速而簡單的加入 這就是我們今天的主題。圖1好,我們假定你肯能以前已經在哪看過這個模板或執行過用這個模板建立的專案。我們說要做的就是移除那個旋轉的彩色...