Android Emulator 给用户提供  GPU on 选项,意思是利用 Host ( 就是执行 Emulator 的PC机) 的 GPU. 当然PC机必须把 OpenGL 的驱动装好

在实现上就是把 libGLESv1_CM.so  libGLESv2.so 替换掉,当system调用 gl的函数的时候,把调用打包为stream,并通过 pipe 发送到 host端处理,进入转化为对 host opengl的调用。

光这样还不够,还要把 libegl, libgralloc 都替换了,由于要调用 host 端的 opengl 必须有 rendercontext, 所以要把 android egl 也转化为host 的 xgl的调用(假设你用 ubuntu).

创建

正常情况下,当一个apk进程须要创建窗口的时候,它调用egl的函数创建 Surface, 也要调用 gralloc的中函数创建内存来存放Surface须要的光栅 , 而后把 两者关联,这些都是在本进程中完毕的,但在 Android 3D emulation 的体系结构中,窗口不能直接创建了,而必需通过发命令给 host 端 render 让它来调用 xgl 的命令来创建

Surface相应 3D Emulation 中的 WindowSurface, 光栅内存相应 3D Emulation 中的 ColorBuffer.

这里的FrameBuffer 是 3D emulation 中的虚拟 FrameBuffer, 他对 ColorBuffer, WindowSurface, RenderContext进行集中管理

更新

当APK调用swapBuffers (就是把已经画的上屏, 这须要各Surface提供图象内存,有SurfaceFlinger做处理并显示到屏幕上),能够想象使用opengl的画图已经结束,如今就是运行一系列内存 copy, ColorBuffer 把opengl绘好图的 image 读取出来.

elg的eglMakeCurrent參数提供第一个surface是用来画东西的,而第二个就是读取的

public boolean eglMakeCurrent(EGLDisplay display, EGLSurface draw, EGLSurface read, EGLContext context) ;

应用程序画东西的时候使用的应该是 EGLSurface draw, 这个 Surface是后台的,看不见,仅仅是为了能成功调用opengl的进行硬件渲染

如今上屏了,须要曾经draw的 surface光栅数据读取回来,当然这是eglMakeCurrent 參数提供的

读取的Surface光栅内存供SurfaceFlinger操作,最后生成的屏幕图像在FrameBuffer中,能够直接上屏

最后你在emulator 中,跑赛车游戏也没有问题

Android 3D emulation 架构理解的更多相关文章

  1. Android系统的架构

    android的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心层. 1.应用程序 Andr ...

  2. fir.im Weekly - iOS/Android 应用程序架构解析

    假如问你一个iOS or Android app的架构,你会从哪些方面来说呢? 本期 fir.im Weekly 收集了关于  iOS/Android 开发资源,也加入了一些关于 Web 前端方面的分 ...

  3. Android系统四层架构分享

    Android系统四层架构 个人网站:http://www.51pansou.com Android视频下载:Android视频 Android源码下载:Android源码 如果把Android系统看 ...

  4. Android的系统架构

    转自Android的系统架构 从上图中可以看出,Android系统架构为四层结构,从上层到下层分别是应用程序层.应用程序框架层.系统运行库层以及Linux内核层,分别介绍如下:     1)应用程序层 ...

  5. Android系统框架构

    写此本文是为了对Android系统框架有一个整体的认识和了解,对于开发和测试人员脑子里要有整体认识以便对工作有所帮助. 进入正题 首先Android系统架构采用了分层架构的思想,共分为四层由上到下分: ...

  6. Android基础-系统架构分析,环境搭建,下载Android Studio,AndroidDevTools,Git使用教程,Github入门,界面设计介绍

    系统架构分析 Android体系结构 安卓结构有四大层,五个部分,Android分四层为: 应用层(Applications),应用框架层(Application Framework),系统运行层(L ...

  7. Android之系统架构

    Android 是Google开发的基于Linux平台的开源手机操作系统.它包括操作系统.用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍.Andr ...

  8. Android面试题3之描写叙述下Android的系统架构

    描写叙述下Android的系统架构: Android系统从下往上分为Linux内核层(linux kerner),执行库(runtime library),应用程序框架层,应用程序层 linuxker ...

  9. Android平台及其架构(部分转载)

    一.Android的系统架构 1.      应用程序 同Android系统一起发布的核心应用程序,如email 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等. 这些应用程序都是用 ...

随机推荐

  1. 函数buf_LRU_free_from_unzip_LRU_list

    /******************************************************************//** Try to free an uncompressed ...

  2. NLog 传递参数

    用NLog记文件日志,一般都用{$basedir}变量,把日志记在运行的目录或者它的子目录下,遇到要写在其他目录的下,看了下Nlog找到用环境变量传参数. .net 里写 Environment.Se ...

  3. shape的属性

    <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http: ...

  4. Welcome to Linux From Scratch!

    /**************************************************************************** * Welcome to Linux Fro ...

  5. ORACLE参数文件

    一.oracle pfile/spfile区别    pfile 默认的名称为“init+例程名.ora”文件路径:E:\oracle\product\10.2.0\db_1\dbs,这是一个文本文件 ...

  6. 【转】Android AlertDialog 点击对话框外部区域不关闭的设置

    原文网址:http://blog.sina.com.cn/s/blog_8f1c79dd0101a63u.html 在Android开发中,常常需要调用对话框,但会遇到这样一种情况,在显示对话框的时候 ...

  7. C#日期时间格式化

    日期转化一为了达到不同的显示效果有时,我们需要对时间进行转化,默认格式为:2007-01-03 14:33:34 ,要转化为其他格式,要用到DateTime.ToString的方法(String, I ...

  8. java jvm学习笔记四(安全管理器)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一 ...

  9. UPC OJ 一道水题 STL

    Problem C: 字符串游戏 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 10  Solved: 3 [Submit][Status][Web ...

  10. Python环境变量设置

    在Windows环境下安装了python后,为了方便运行.py文件,可以设置环境变量如下: 环境变量位置 添加值 添加后效果 系统变量中的PATH python.exe所在目录,比如D:\Python ...