- 模拟器到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: <