Android Dev Intro - Opengl ES and EGL
2016-05-31 17:33
711 查看
Opengl ES define platform independent GL draw graphics instructions
EGL define display, context and surface.
Display (EGLDisplay) is the abstract of display device
Surface (EGLSurface) is the abstract of memory area used to store graphics
Context (EGLContext) is used to save state information of Opengl ES
General Steps.
1. acquire EGLDisplay object
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
2. init EGLDisplay object
eglInitialize(display, 0, 0);
3. acquire EGLConfig object
eglChooseConfig(display, attribs, nullptr,0, &numConfigs);
auto supportedConfigs = new EGLConfig[numConfigs];
assert(supportedConfigs);
eglChooseConfig(display, attribs, supportedConfigs, numConfigs, &numConfigs);
auto i = 0;
for (; i < numConfigs; i++) {
auto& cfg = supportedConfigs[i];
EGLint r, g, b, d;
if (eglGetConfigAttrib(display, cfg, EGL_RED_SIZE, &r) &&
eglGetConfigAttrib(display, cfg, EGL_GREEN_SIZE, &g) &&
eglGetConfigAttrib(display, cfg, EGL_BLUE_SIZE, &b) &&
eglGetConfigAttrib(display, cfg, EGL_DEPTH_SIZE, &d) &&
r == 8 && g == 8 && b == 8 && d == 0 ) {
config = supportedConfigs[i];
break;
}
}
if (i == numConfigs) {
config = supportedConfigs[0];
}
eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format);
4. Create EGLContext object
context = eglCreateContext(display, config, NULL, NULL);
5. Create EGLSurface object
surface = eglCreateWindowSurface(display, config, engine->app->window, NULL);
6. bind EGLSurface with EGLContext
eglMakeCurrent(display, surface, surface, context);
7. draw graphics
glClearColor(((float)engine->state.x)/engine->width, engine->state.angle,
((float)engine->state.y)/engine->height, 1);
glClear(GL_COLOR_BUFFER_BIT);
eglSwapBuffers(engine->display, engine->surface);
8. unbind EGLSurface with EGLContext
eglMakeCurrent(engine->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
9. releas EGLContext object
eglDestroyContext(engine->display, engine->context);
10. release EGLSurface object
eglDestroySurface(engine->display, engine->surface);
11. Destory EGLDisplay object
eglTerminate(engine->display);
engine->display = EGL_NO_DISPLAY;
engine->context = EGL_NO_CONTEXT;
engine->surface = EGL_NO_SURFACE;
相关文章推荐
- Android Studio 简介及导入 jar 包和第三方开源库方法 | Drakeet的个人博客
- Android中Textview加横线的属性
- android touch事件传递与分发
- Android布局技巧之创建可重用的UI组件
- Using Github with Android Studio
- android 设置日期的方法
- Android自定义竖直SeekBar Android5.0可以用
- android获取屏幕尺寸
- Android API:自定义ViewGroup
- Android--从零单排系列(4)--常用对话框和DialogFragment的优势
- ImageView的android:adjustViewBounds属性
- Android组件ViewStub基本使用方法详解
- Android自动化测试之Robotium学习(四)
- android 蓝牙连接库(蓝牙设备选择器)
- Android应用插件式开发解决方法
- Android布局优化之ViewStub控件
- Android自动化测试之Robotium学习(三)
- Android Studio IDE 简单学习和介绍
- Android中Listview设置footerView后不展示的问题原因探究
- 使用CMake进行android native开发