Android模拟器图形绘原理(二十二)

本文详细介绍了Android模拟器如何处理图形指令,包括指令如何从模拟器转换为宿主机的桌面API调用,以及使用QemuPipe进行快速通信。通过分析EGL、GLES的转化过程和RenderThread的工作原理,揭示了模拟器内部的渲染流程。
摘要由CSDN通过智能技术生成
  • 模拟器到RenderThread

模拟器接收到指令协议流之后并没有做改变,直接将指令导到Render相关类。

  • Android模拟器的指令转化

模拟器指令转化

Android模拟器实现多个转化的库,实现了上层的EGL,GLES。将相应的函数调用转化为正确的宿主机的桌面API调用。

GLX(Linux),AGL(OS X),WGL(Windows)。OpenGL 2.0来模拟GLES1.1,GLES2.0.

Android系统到模拟器

在Goldfish-openGL下提供了对于EGL,GLES1.1,GLES2.0的相应的编码类,对于其中实现的每一个方法获取到当前gl_encoder_context持有的IOStream,来将数据写入到流之中来进行通信。对于Android系统和模拟器之间的连接是通过HostConnection来实现的。其中的通信实现采用的是QemuPipe。

Android模拟器实现了一种特殊的虚拟设备类来提供宿主系统和模拟器之间非常快速的通信渠道。该种通道的打开连接方式。

  • 首先打开/dev/qemu_pipe设备来进行读和写操作,从Linux3.10开始,设备被重新命名为/dev/goldfish_pipe,但是和之前的操作还是一样的。

  • 提供一个零结尾的字符创描述我们所要连接的服务。

  • 然后通过简单的读写操作便可以和其进行通信。

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: <
  • 26
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值