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);