Android-NDK-EGL
EGL的定義
EGL是一個接口,它位于渲染API如OpenCL,OpenGL,OpenGL ES和底層系統的中間。EGL提供了用來創建渲染surfaces的機制,在它上面客戶端的api能夠繪制,創建圖像的上下文和同步客戶端api和渲染api。
EGL的操作
EGL的類型
EGLBoolean,EGL_TRUE, EGL_FALSE
EGLint:是一個整數類型
EGLAttrib:是一個整數類型,經常被用來代表句柄和指針的值在屬性列表中。
EGLContext:代表了一個客戶端API的上下文。依賴于客戶端的API,代表一個抽象機器的狀態向量描述了客戶端API和允許執行客戶端的API命令。
EGLIMage:代表了EGLImage對象的句柄。
EGLSurface:是一個不透明的類型,代碼客戶端api可以繪制內容在上面的surface
EGLSync:代表了一個一個sync對象的句柄
EGLTIme:代表以ns為單位的時間
Displays
EGLDisplay是一個抽象的可以被繪制的display。
渲染上下文和繪制的surfaces
EGL的一個目的是:提供一個方式創建客戶端API渲染上下文和把他們關聯到繪制的surfaces.
EGL定義了幾種類型的繪制surface,包括windows(用于onScreen渲染),pbuffers(用于離屏渲染),和pixmaps(用于麗萍渲染到buffer,可以通過原生api進行訪問),統稱為GEGLSurface。
EGLSSurfaces的創建依賴EGLConfig.EGLConfig描述了顏色buffer的深度、類型,量化和輔助buffer(深度,模版 buffers)等。
輔助buffer和EGLSurce相關,不是和上下。如果幾個上下文寫到同一個surface,那么他們講共享這些buffer。
一個上下文必須和一個EGLSurface進行相關,而且是兼容,如果:
1)支持顏色buffer是同樣的類型
2)顏色buffer和輔助buffer是同樣的深度
渲染模式
支持兩種渲染模式:back bufferedhe single bufferd
back buffered:被window和pbuffer surfaces使用。顏色buffer使用的內存由EGL來分配。當client完成畫完一個幀時,這個備份buffer會拷貝到一個可視的窗口,通過eglSwapBuffers.PBuffer有一個備份buffer,但是沒有關聯的window,所以備份buffer不需要拷貝。
sigle buffered的渲染,被pixmap surfaces使用。color buffer的內存分配發生在surface的創建時。當client完成繪制一幀是,這個native pixmap包含最終圖像。
都可以通過eglCopyBuffers來拷貝buffer到指定的pixmap。
原生surface的坐標系統
原生窗口的坐標系統和opengl是相反的。原生窗口的(0,0)坐標在左上角,但是client卻在左下角。client渲染到窗口和pixmpa必須逆轉字節的y坐標,當訪問的顏色buffer在原生窗口時。
EGL Function and Errors
Errors
eglGetError(void)
eglGetPlatformDisplay,
eglInitialize(EGLDisplay dpy,EGLint *major,EGLint *minor);
總結
以上是生活随笔為你收集整理的Android-NDK-EGL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android-NDK-audio-ec
- 下一篇: android-NDK-Opengl