欢迎使用CSDN-markdown编辑器

来源:互联网 发布:拜占庭东罗马知乎 编辑:程序博客网 时间:2024/06/18 10:33

EGL函数调用解读

相关链接1
相关链接2
EGLDisplay 是一个关联系统物理屏幕的通用数据类型。
函数原型用于获取 Native Display :

EGLDisplay eglGetDisplay (NativeDisplayType display);

其 中 display 参数是 native 系统的窗口显示 ID 值。如果你只是想得到一个系统默认的 Display ,你可以使用 EGL_DEFAULT_DISPLAY 参数。如果系统中没有一个可用的 native display ID 与给定的 display 参数匹配,函数将返回 EGL_NO_DISPLAY ,而没有任何 Error 状态被设置。

EGL初始化:

EGLBoolean eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor);

其中 dpy 应该是一个有效的 EGLDisplay 。函数返回时, major 和 minor 将被赋予当前 EGL 版本号。比如 EGL1.0 , major 返回 1 , minor 则返回 0 。给 major 和 minor 传 NULL 是有效的,如果你不关心版本号。

结束EGLDisplay

EGLBoolean eglTerminate()

结束一个EGLDisplay,并不结束EGL本身。

eglQueryString() 函数是另外一个获取版本信息和其他信息的途径。通过 eglQueryString() 获取版本信息需要解析版本字符串,所以通过传递一个指针给 eglInitializ() 函数比较容易获得这个信息。eglQueryString() 必须先使用 eglInitialize() 初始化 EGLDisplay ,否则将得到 EGL_NOT_INITIALIZED 错误信息。 
const char * EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name);

参数 name 可以是 EGL_VENDOR, EGL_VERSION, 或者 EGL_EXTENSIONS 。

EGLConfigs 是一个用来描述 EGL surface 配置信息的数据类型。

EGLBoolean eglGetConfigs (EGLDisplay dpy, EGLConfig *configs,EGLint config_size, EGLint *num_config);

参数 configs 将包含在你的平台上有效的所有 EGL framebuffer 配置列表。

EGL_BUFFER_SIZE int 0 3 Smaller value
EGL_RED_SIZE int 0 2 Larger value
EGL_GREEN_SIZE int 0 2 Larger value
EGL_BLUE_SIZE int 0 2 Larger value
EGL_ALPHA_SIZE int 0 2 Larger value
EGL_CONFIG_CAVET enum EGL_DONT_CARE 1(first) Exact value
EGL_CONFIG_ID int EGL_DONT_CARE 9 Exact value
EGL_DEPTH_SIZE int 0 6 Smaller value
EGL_LEVEL int 0 - Equal value
EGL_NATIVE_RENDERABLE Boolean EGL_DONT_CARE - Exact value
EGL_NATIVE_VISUAL_TYPE int EGL_DONT_CARE 8 Exact value
EGL_SAMPLE_BUFFERS int 0 4 Smaller value
EGL_SAMPLES int 0 5 Smaller value
EGL_STENCIL_SIZE int 0 7 Smaller value
EGL_SURFACE_TYPE bitmask
EGL_WINDOW_BIT - Mask value
EGL_TRANSPARENT_TYPE enum
EGL_NONE - Exact value
EGL_TRANSPARENT_RED_VALUE int
EGL_DONT_CARE - Exact value
EGL_TRANSPARENT_GREEN_VALUE int
EGL_DONT_CARE - Exact value
EGL_TRANSPARENT_BLUE_VALUE int
EGL_DONT_CARE - Exact value

基 于 EGL 的属性,你可以定义一个希望从系统获得的配置,它将返回一个最接近你的需求的配置。选择一个你特有的配置是有点不合适的,因为只是在你的平台上使用有效。 eglChooseConfig() 函数将适配一个你所期望的配置,并且尽可能接近一个有效的系统配置。

EGLBoolean eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list,EGLConfig *configs, EGLint config_size, EGLint * num_config);

参数 attrib_list 指定了选择配置时需要参照的属性。参数 configs 将返回一个按照 attrib_list 排序的平台有效的所有 EGL framebuffer 配置列表。参数 config_size 指定了可以返回到 configs 的总配置个数。参数 num_config 返回了实际匹配的配置总数。

可以查询某个配置的某个属性:

EGLBoolean eglGetConfigAttrib(EGLDisplay display,    // 已初始化                                EGLConfig config,      // 某个配置                                EGLint attribute,      // 某个属性                                EGLint * value);  

获取EGL配置时需要参照的属性

函数描述:创建一个EGL surface,surface是可以实际显示在屏幕上类型。

EGLSurface eglCreateWindowSurface(EGLDisplay display,                                    EGLConfig config,                                    EGLNativeWindowType window, // 在Windows上就是HWND类型                                    const EGLint* attribs);     // 此属性表非彼属性表 

这里的属性表并非用于OpenGL ES 2.0,而是其它的API,比如OpenVG。我们只需要记住一个:EGL_RENDER_BUFFER [EGL_BACK_BUFFER, EGL_FRONT_BUFFER]。
OpenGL ES 2.0是必须工作于双缓冲窗口系统的。

OpenGL ES 2.0可以向pixel buffer渲染,同样使用硬件加速。pbuffer经常用来生成纹理映射。如果想渲染到纹理,常用更高效的framebuffer对象。

EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config,                   const EGLint *attrib_list);
EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config,                  EGLNativePixmapType pixmap,                  const EGLint *attrib_list);

创建EGL PixmapSurface和PbufferSurface类型,这两种类型不可直接显示与屏幕上。

销毁一个EGL surface对象

EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface);

查询surface的参数。

EGLBoolean EGLAPIENTRY eglQuerySurface(EGLDisplay dpy, EGLSurface surface,               EGLint attribute, EGLint *value);

Set the current rendering API

EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api)

Query the current rendering API

EGLAPI EGLenum EGLAPIENTRY eglQueryAPI(void);

EGL的同步函数:EGLBoolean eglWaitClient() 延迟客户端的执行,等待服务器端完成OpenGL ES 2.0或者OpenVG的渲染。
如果失败,返回错误码:EGL_BAD_CURRENT_SURFACE。

EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient(void);

Release EGL per-thread state

EGLBoolean EGLAPIENTRY eglReleaseThread(void);

用于创建绑定到OpenVG图片的off-screen的pixel buffer surface,失败时返回EGL_NO_SURFACE。

EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer(          EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer,          EGLConfig config, const EGLint *attrib_list);

eglSurfaceAttrib用于设置surface属性,返回EGL_FALSE时可能的错误为EGL_BAD_DISPLAY、EGL_BAD_MATCH、EGL_NOT_INITIALIZED、EGL_BAD_SURFACE、EGL_BAD_ATTRIBUTE。attribute值为EGL_MIPMAP_LEVEL、EGL_MULTISAMPLE_RESOLVE、EGL_SWAP_BEHAVIOR。

EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface,                EGLint attribute, EGLint value);

eglBindTexImage用于定义二维纹理图片,返回EGL_FALSE时可能的错误为EGL_BAD_ACCESS、EGL_BAD_MATCH、EGL_BAD_SURFACE。

EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);

eglReleaseTexImage用于释放用作纹理的color buffer,返回EGL_FALSE时可能的错误为EGL_BAD_MATCH、EGL_BAD_SURFACE。

EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);

eglSwapInterval用于设置buffer交换时的最小帧数,返回EGL_FALSE时可能的错误为EGL_BAD_CONTEXT、EGL_BAD_SURFACE。

EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval);

使用 eglCreateContext 创建一个用于绘制的屏幕上下文。

EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config,                EGLContext share_context,                const EGLint *attrib_list);

eglDestroyContext用于销毁渲染context,如果有其它线程使用这个context时就等到不使用时再销毁,返回EGL_FALSE时可能的错误为EGL_BAD_DISPLAY、EGL_NOT_INITIALIZED、EGL_BAD_CONTEXT。

EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx);

将OpenGL context与surface绑定。eglMakeCurrent函数成为Render Target,但是,由于eglMakeCurrent会导致graphics context的切换从而影响性能。

EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw,              EGLSurface read, EGLContext ctx);

eglGetCurrentContext用于获取当前的渲染context。

EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext(void);

eglGetCurrentSurface用于获取当前的surface。

EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw);

eglGetCurrentDisplay用于获取当前的display。

EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void);

eglQueryContext用于获取context信息。

EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext(EGLDisplay dpy, EGLContext ctx,               EGLint attribute, EGLint *value);

用于执行GL操作完毕后才继续后面的渲染工作

EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL(void);

用于native操作执行完毕之后才继续后面GL渲染

EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine);

用于置换surface的颜色buffer到native window

EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface);

用于拷贝surface的颜色buffer到native pixmap

EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface,              EGLNativePixmapType target);
原创粉丝点击