Android 3D emulation 架构理解
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 架构理解的更多相关文章
- Android系统的架构
android的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心层. 1.应用程序 Andr ...
- fir.im Weekly - iOS/Android 应用程序架构解析
假如问你一个iOS or Android app的架构,你会从哪些方面来说呢? 本期 fir.im Weekly 收集了关于 iOS/Android 开发资源,也加入了一些关于 Web 前端方面的分 ...
- Android系统四层架构分享
Android系统四层架构 个人网站:http://www.51pansou.com Android视频下载:Android视频 Android源码下载:Android源码 如果把Android系统看 ...
- Android的系统架构
转自Android的系统架构 从上图中可以看出,Android系统架构为四层结构,从上层到下层分别是应用程序层.应用程序框架层.系统运行库层以及Linux内核层,分别介绍如下: 1)应用程序层 ...
- Android系统框架构
写此本文是为了对Android系统框架有一个整体的认识和了解,对于开发和测试人员脑子里要有整体认识以便对工作有所帮助. 进入正题 首先Android系统架构采用了分层架构的思想,共分为四层由上到下分: ...
- Android基础-系统架构分析,环境搭建,下载Android Studio,AndroidDevTools,Git使用教程,Github入门,界面设计介绍
系统架构分析 Android体系结构 安卓结构有四大层,五个部分,Android分四层为: 应用层(Applications),应用框架层(Application Framework),系统运行层(L ...
- Android之系统架构
Android 是Google开发的基于Linux平台的开源手机操作系统.它包括操作系统.用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍.Andr ...
- Android面试题3之描写叙述下Android的系统架构
描写叙述下Android的系统架构: Android系统从下往上分为Linux内核层(linux kerner),执行库(runtime library),应用程序框架层,应用程序层 linuxker ...
- Android平台及其架构(部分转载)
一.Android的系统架构 1. 应用程序 同Android系统一起发布的核心应用程序,如email 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等. 这些应用程序都是用 ...
随机推荐
- 函数buf_LRU_free_from_unzip_LRU_list
/******************************************************************//** Try to free an uncompressed ...
- NLog 传递参数
用NLog记文件日志,一般都用{$basedir}变量,把日志记在运行的目录或者它的子目录下,遇到要写在其他目录的下,看了下Nlog找到用环境变量传参数. .net 里写 Environment.Se ...
- shape的属性
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http: ...
- Welcome to Linux From Scratch!
/**************************************************************************** * Welcome to Linux Fro ...
- ORACLE参数文件
一.oracle pfile/spfile区别 pfile 默认的名称为“init+例程名.ora”文件路径:E:\oracle\product\10.2.0\db_1\dbs,这是一个文本文件 ...
- 【转】Android AlertDialog 点击对话框外部区域不关闭的设置
原文网址:http://blog.sina.com.cn/s/blog_8f1c79dd0101a63u.html 在Android开发中,常常需要调用对话框,但会遇到这样一种情况,在显示对话框的时候 ...
- C#日期时间格式化
日期转化一为了达到不同的显示效果有时,我们需要对时间进行转化,默认格式为:2007-01-03 14:33:34 ,要转化为其他格式,要用到DateTime.ToString的方法(String, I ...
- java jvm学习笔记四(安全管理器)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一 ...
- UPC OJ 一道水题 STL
Problem C: 字符串游戏 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 10 Solved: 3 [Submit][Status][Web ...
- Python环境变量设置
在Windows环境下安装了python后,为了方便运行.py文件,可以设置环境变量如下: 环境变量位置 添加值 添加后效果 系统变量中的PATH python.exe所在目录,比如D:\Python ...