相关链接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);