下载此文档

Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析.doc


文档分类:办公文档 | 页数:约60页 举报非法文档有奖
1/60
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/60 下载此文档
文档列表 文档介绍
Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
在前面一篇文章中,我们分析了Android应用程序请求SurfaceFlinger服务创建Surface的过程。有了Surface之后,Android应用程序就可以在上面绘制自己的UI了,接着再请求SurfaceFlinger服务将这个已经绘制好了UI的Surface渲染到设备显示屏上去。在本文中,我们就将详细分析Android应用程序请求SurfaceFlinger服务渲染Surface的过程。
Android应用程序在请求SurfaceFlinger服务渲染一个Surface之前,首先要将该Surface作为当前活动的绘图上下文,以便可以使用OpengGL库或者其它库的API来在上面绘制UI,我们以Android系统的开机动画应用程序bootanim为例,来说明这个问题。
从前面一文可以知道,Android系统的开机动画应用程序bootanim是在BootAnimation类的成员函数readyToRun中请求SurfaceFlinger服务创建Surface的。这个Surface创建完成之后,就会被设置为当前活动的绘图上下文,如下所示:
[cpp] view plain copy 在CODE上查看代码片派生到我的代码片
status_t BootAnimation::readyToRun() {
......

// create the native surface
sp<SurfaceControl> control = session()->createSurface(
getpid(), 0, , , PIXEL_FORMAT_RGB_565);
......

sp<Surface> s = control->getSurface();
......

// initialize opengl and egl
const EGLint attribs[] = {
EGL_DEPTH_SIZE, 0,
EGL_NONE
};
......

EGLConfig config;
EGLSurface surface;
EGLContext context;

EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);

eglInitialize(display, 0, 0);
EGLUtils::selectConfigForNativeWindow(display, attribs, (), &config);
surface = eglCreateWindowSurface(display, config, (), NULL);
context = eglCreateContext(display, config, NULL, NULL);
......

if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE)
return NO_INIT;

......
}
BootAnimation类的成员函数readyToRun首先调用eglGetDisplay和eglInitialize函数来获得和初始化OpengGL库的默认显示屏,接着再调用EGLUtils::selectConfigForNativeWindow函数来获得前面所创建的一个Surface(由sp<Surface>指针s来描述)的配置信息。有了这些信息之后,接下来就分别调用eglCreateWindowSurface和eglCreateContext函数来创建一个适用于OpenGL库使用的绘图表面surface以及绘图上下文context,最后就可以调用eglMakeCurrent函数来将绘图表面surface和绘图上下文context设置为当前活动的绘图表面和绘图上下文,这就相当于是将前面请求SurfaceFlinger服务创建的一个Surface设置为当前活动的绘图上下文了。
完成了上述操作之后,Android系统的开机动画应用程序bootanim就可以继续使用OpengGL库的其它API来在当前活动的Surface上绘制UI了,不过,通过前面一文的学习,我们知道,此时SurfaceFlinger服务为Android应用程序创建的Surface只有UI元数据缓冲区,而没有

Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数60
  • 收藏数0 收藏
  • 顶次数0
  • 上传人mh900965
  • 文件大小597 KB
  • 时间2018-04-22
最近更新