WEB开发网
开发学院手机开发Android 开发 Android 图形系统详解 阅读

Android 图形系统详解

 2010-09-06 08:33:00 来源:WEB开发网   
核心提示:been called GGLBufferMultiple layers are just composited to the final buffer in their Z order.有几个对象与Surface概念紧密相关:1. Java Surface (frameworks/base/core/java/and
been called GGLBuffer

Multiple layers are just composited to the final buffer in their Z order.

有几个对象与Surface概念紧密相关:

1. Java Surface (frameworks/base/core/java/android/view/Surface.java)。该对象被应用间接调用(通过 SurfaceView, ViewRoot等), 应用需要创建surface,(并同时创建canvas), 将图形绘制到这个对象上并最终投递到屏幕上。

2. C++ Surface (frameworks/base/libs/ui/Surface.cpp。 这个对象被Java Surface通过Jni 调用,实现Java Surface 的功能

3. ISurface (以及其派生类BnSurface)。这个对象是应用和server之间的接口。C++ Surface创建这个ISurface (BnSurface)并发送命令,如更新surface内容到屏幕上。Server端接受这个命令并执行相应操作。

研究一个surface如何创建的关键路径如下:

1. frameworks/base/core/java/android/view/Surface.java -- Surface::Surface ()

2. frameworks/base/core/jni/android_view_Surface.cpp -- Surface_init ()。在这个函数中SurfaceComposerClient 对象被创建。

3. frameworks/base/libs/ui/SurfaceComposerClient.cpp -- SurfaceComposerClient::SurfaceComposerClient (). 这个函数非常重要,在这里建立了client和server之间的桥梁。通过函数_get_surface_manager()获得了一个指向 server的IBinder 对象(具有ISurfaceComposer接口),之后通过这个IBinder就可以跨进程访问Server的功能。接着调用 ISurfaceComposer::createConnection()创建并返回了一个ISurfaceFlingerClient的 IBinder。

4. frameworks/base/libs/ui/SurfaceComposerClient.cpp -- SurfaceComposerClient::createSurface().这个函数中,利用前面获得的 ISurfaceFlingerClient的IBinder,调用其createSurface接口。

5.frameworks/base/libs/surfaceflinger/SurfaceFlinger.cpp -- BClient::createSurface ()。BClient由ISurfaceFlingerClient派生而来。

6. frameworks/base/libs/surfaceflinger/SurfaceFlinger.cpp -- SurfaceFlinger:: createSurface()。这个函数为Surface创建一个对应的Layer。

上述关键路径中,1,2,3,4运行于client进程中,而5,6运行与server进程中。server作为一个service提供给client访问。

上一页  1 2 3 4  下一页

Tags:Android 图形

编辑录入:coldstar [复制链接] [打 印]
赞助商链接