Android模拟器图形绘原理(二十二),一线互联网架构师设计思想解读开源框架

本文深入探讨了Android模拟器中的图形绘制原理,重点介绍了通信协议、指令编解码和渲染流程。QEMU Pipe提供了比TCP更快的数据传输速度,模拟器通过emugen工具编码解码指令。EGL/GLES函数调用的描述文件用于生成encoder静态库,将命令转化为简单的byte信息发送。在模拟器中,RendererImpl和RenderThread协同工作,从RenderChannel读取并解码指令流,完成图形渲染。
摘要由CSDN通过智能技术生成

fd = open("/dev/qemu_pipe", O_RDWR);

const char* pipeName = “”;

ret = write(fd, pipeName, strlen(pipeName)+1);

if (ret < 0) {

//error

}

… ready to go

这里的pipeName是要使用的服务名程,这里支持的服务有

  • tcp:

提供一个非内部模拟器的NAT router,我们只能使用这个socket进行读写,接受,不能够进行连接非本地socket。

  • unix:

打开一个Unix域socket在主机上

  • opengles

连接到OpenGL ES模拟进程,现在这个实现等于连接tcp:22468,但是未来可能会改变。

  • qemud

连接到qemud服务在模拟器内,这个取代了老版本中通过/dev/ttys1的连接方式.

在内核中代码,向外提供了一个对于qemu_pipe,其中包含了我们如何与其进行交互。

由于QEMU Pipe发送数据的时候使用的是裸包,其速度要比TCP的方式快很多。

通信协议的实现

对于指令的传输,要对指令进行编解码。emugen,通过这个工具可以进行编码解码类的生成。在GLES1.1,GLES2.0,EGL之中定义了一些代码生成时,需要用到的文件。用来定义生成代码的文是.types,.in,.attrib。对于EGL的声明则是在renderControl。对于EGL的文件都是以‘renderControl’开头的,这个主要是历史原因,他们调用了gralloc系统的模块来管理图形缓冲区在比EGL更低的级别。

EGL/GLES函数调用被通过一些规范文件进行描述,这些文件描述了类型,函数签名和它们的一些属性。系统的encoder静态库就是通过这些生成的文件来构建的,它们包含了可以将EGL/GLES命令转化为简单的byte信息的通过IOStream进行发送。

模拟器的绘制

模拟器接收渲染指令的位置,

在android/opengles.cpp控制了动态的装载渲染库,和正确的初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值