指定显示连接,默认连接为EGL_DEFAULT_DISPLAY
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
打开连接之后,需要初始化EGL
major 指定EGL实现返回的主版本号,可能为NULL
minor 指定EGL实现返回的次版本号,可能为NULL
EGLint major, minor;
if (!eglInitialize(display, &major, &minor)){
return EGL_FALSE;
}
初始化了EGL之后,就可以确定可用渲染表面的类型和配置
使用方法:
eglGetConfigs(EGLDisplay display, EGLConfig *configs,EGLint maxReturnCOnfigs,EGLint *numConfigs)
查询EGLConfig属性
eglGetConfigAttrib(EGLDisplay display, EGLConfig config, EGLint attribute, EGLint *value)
EGL选择配置:
configAttribs 指定configs匹配的属性列表
config 指定匹配列表
指定配置的大小
numConfigs 指定返回的配置大小
const EGLint configAttribs[] = {
EGL_RENDERABLE_TYPE, EGL_WINDOW_BIT,
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
EGL_DEPTH_SIZE, 24,
EGL_NONE
};
EGLConfig config;
EGLint numConfigs;
if (!eglChooseConfig(display, configAttribs, &config, 1, &numConfigs)){
return EGL_FALSE;
}
创建屏幕上的渲染区域:EGL窗口
config 指定配置
window 指定原生窗口
attribList 指定窗口列表,可能为NULL
EGLSurface window = eglCreateWindowSurface(display, config, nativeWindow, attribList );
if (window == EGL_NO_SURFACE){
return EGL_FALSE;
}
创建一个渲染上下文
config 指定配置
contextAttribs 指定创建山西该文使用的属性列表;只有一个可接受的属性–EGL_CONTEXT_CLIENT_VERSION
const EGLint contextAttribs[] = {
EGL_CONTEXT_CLIENT_VERSION, 3,
EGL_NONE
};
EGLContext context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs);
if (context == EGL_NO_CONTEXT){
return EGL_FALSE;
}
EGL_NO_CONTEXT:没有共享,不允许多个EGL上下文共享特定类型的数据
指定某个EGLContext为当前上下文
if (!eglMakeCurrent(display, window, window, context)){
return EGL_FALSE;
}
简单整合
#include "EGL/egl.h"
static EGLBoolean initWindow(ANativeWindow* nativeWindow){
const EGLint configAttribs[] = {
EGL_RENDERABLE_TYPE, EGL_WINDOW_BIT,
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
EGL_DEPTH_SIZE, 24,
EGL_NONE
};
const EGLint contextAttribs[] = {
EGL_CONTEXT_CLIENT_VERSION, 3,
EGL_NONE
};
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
if (display == EGL_NO_DISPLAY){
return EGL_FALSE;
}
EGLint major, minor;
if (!eglInitialize(display, &major, &minor)){
return EGL_FALSE;
}
EGLConfig config;
EGLint numConfigs;
if (!eglChooseConfig(display, configAttribs, &config, 1, &numConfigs)){
return EGL_FALSE;
}
EGLSurface window = eglCreateWindowSurface(display, config, nativeWindow, NULL);
if (window == EGL_NO_SURFACE){
return EGL_FALSE;
}
EGLContext context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs);
if (context == EGL_NO_CONTEXT){
return EGL_FALSE;
}
if (!eglMakeCurrent(display, window, window, context)){
return EGL_FALSE;
}
return EGL_TRUE;
}
参考于《OpenGL es3.0编程指南》