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 短消息程序,日历,地图,浏览器,联系人管理程序等. 这些应用程序都是用 ...
随机推荐
- 【HDOJ】2459 Maximum repetition substring
后缀数组+RMQ. /* 2459 */ #include <iostream> #include <sstream> #include <string> #inc ...
- E-BOM和M-BOM的区别
简单一点,ENG BOM一般用于试产,正式BOM一般用于量产:ENG BOM是FOR RD设计用的.即TEMP档.并非正式区的.一般的电子零件类的企业都会用到ENG BOM.在EBS中,ENG BOM ...
- IT国家重点实验室
软件工程国家重点实验室(武汉大学): http://www.sklse.whu.edu.cn/ 南京大学: http://keysoftlab.nju.edu.cn/ 水声技术国家重点实验室 http ...
- Java盲点:双重检查锁定及单例模式
尊重原创: http://gstarwd.iteye.com/blog/692937 2004 年 5 月 01 日 所有的编程语言都有一些共用的习语.了解和使用一些习语很有用,程序员们花费宝贵的时间 ...
- Java [Leetcode 217]Contains Duplicate
题目描述: Given an array of integers, find if the array contains any duplicates. Your function should re ...
- yahoo 交易数据
yahoo提供国内和国外股市每天的交易数据资料,这可谓一大幸事啊.http://table.finance.yahoo.com/table.csv?s=ibm&d=6&e=22& ...
- 【Python】不定期更新学习小问题整理
1 ctrl+D 退出python 2 from __future__ import division 小数除法 1/2 整除符号 // 比如4//2 3 为什么要写这个? reloa ...
- [zouxianghui] 清空GridPanel的checkbox选中行
清空GridPanel的checkbox选中行,GridPanel.getSelectionModel().clearSelections();可以清空选中状态
- mexopencv问题:Invalid MEX file GLIBCXX_3.4.15 error
参考:http://blog.sina.com.cn/s/blog_74112f030101cmxt.html root@debian-yuliyang:/opt/matlab/sys/os/glnx ...
- C 语言控制台实现五子棋项目
花了一天时间实现了控制台五子棋项目,把项目贴上来.也算是告一段落了. 为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验.所以在编程初期选择了控制台小游戏<单机五子棋> ...