opengl es 初始化及android切后台opengl上下文丢失
来源:互联网 发布:淘宝这几天有啥活动 编辑:程序博客网 时间:2024/06/02 21:44
做ogre1.9 的 android版本适配时发现原有的gl上下文丢失会导致原有贴图资源全部失效,
而这个情况的发生仅仅是由app切进切出后台触发.找了一圈后发现ogre 1.10新版本已经解决了这个问题,
做版本升级时过了一遍egl的初始化过程.
附带我的依赖库集合,mit协议:https://bitbucket.org/mm_longcheng/mm_lib
自用基础库和包装库就先不发了。
egl 简述:
EGL 是 OpenGL ES 和底层 Native 平台视窗系统之间的接口。
主要数据结构有:
EGLDisplay 显示设备,依据不同平台实现不一样
EGLSurface 窗口曲面,包含渲染缓冲区及位深等
EGLContext opengles 上下文
在windows上的初始化,参照ogre 1.10.8
实用方案并不是通常的
m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
而是采用windows本地化方法先创建native_display
HINSTANCE hInst = WinMain传进去的实例句柄;WNDCLASS wc = {......hInst,参数忽略};RegisterClass(&wc);mWindow = CreateWindowEx(......hInst,参数忽略);mNativeDisplay = GetDC(mWindow);mEglDisplay = eglGetDisplay(mNativeDisplay);之后创建窗口曲面和gl上下文
EGLSurface mEglSurface = eglCreateWindowSurface(display, mEglConfig, (EGLNativeWindowType)mWindow, NULL);EGLContext mEglContext = eglCreateContext(mGLDisplay, glconfig, shareList, 0);
要使用opengl函数则需要
eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext);这种数据结构使得对于不同的渲染表面使用一个gl上下文成为可能,
需要设备支持,android需要GLSurfaceView.setPreserveEGLContextOnPause类似的版本android api 11 以上,现代设备基本都支持.
在android上的初始化opengl环境通常使用SurfaceView而不是GLSurfaceView.在SurfaceHolder回调中来触发Surface的创建和销毁.
不详细列出,实现版本可以参看ogre 1.10.8 ogre\RenderSystems\GLSupport\src\EGL\WIN32\OgreWin32EGLWindow.cpp
中的_notifySurfaceDestroyed和_notifySurfaceCreated.
surfaceCreated(参数){ native_surface_created(参数);}surfaceDestroyed(参数){ native_surface_destroyed(参数);}native_surface_created(参数){ // 如果没有mEglSurface创建,构建需要的texture资源 // 如果有mEglSurface则简单做一次更新绑定,不必重新加载失效的texture资源}native_surface_destroyed(参数){ // 销毁mEglSurface,保留mEglContext(需要硬件版本支持)}
- opengl es 初始化及android切后台opengl上下文丢失
- openGl ES初始化
- 在Android下初始化Native OpenGL ES
- OpenGL ES Programming Guide for iOS 配置OpenGL ES上下文
- Android OpenGL ES 包及流程摘要
- Android OpenGL ES材质及光照示例
- OpenGLES---初始化OpenGL-ES环境
- OpenGLES---初始化OpenGL-ES环境
- android opengl es 源码
- Android NDK opengl ES
- android的opengl es
- android opengl es--立方体
- Android OpenGL ES
- android opengl es
- Android OpenGL ES
- Android OpenGL ES 学习计划
- Android OpenGL ES
- Android OpenGL ES->GLSurfaceView
- codeforces 855A
- 500. Keyboard Row
- Python初学者(零基础学习Python、Python入门)常见问题:书籍推荐、资料、社区
- 第二章静态网页开发技术
- bzoj 5055: 膜法师
- opengl es 初始化及android切后台opengl上下文丢失
- 商品编码(JS)
- OpenGL 纹理单元的使用步骤
- 大话数据结构读书笔记(2)----线性表(2)
- 登录页面
- C++面向对象的程序开发
- 内网穿透访问本地的Java Web项目
- 思维导图-深入理解计算机操作系统
- codeforces 864A