3. 3
1 Android OpenGL ES Remote Rendering
Why to join the VMFive Lab?
System software is very cool.
Want to build fundamental things in the future.
4. 4
1 Android OpenGL ES Remote Rendering
Learning from the VMFive Lab?
Not afraid to read document and source code.
Contributing to open source is not that hard.
My first pull request being merged!!
https://github.com/apitrace/apitrace/pull/384
https://github.com/apitrace/apitrace/pull/383
https://github.com/apitrace/apitrace/graphs/con
tributors
6. 6
1 Android OpenGL ES Remote Rendering
Learning from the VMFive Lab?
Use mailing lists to communite with awesome
people!
This guy is from
nVidia!!
7. 7
1 Android OpenGL ES Remote Rendering
Learning from the VMFive Lab?
Read, build, try to modify Android source
8. 8
1 Android OpenGL ES Remote Rendering
Android OpenGL Remote Rendering
Most app streaming is done by streaming video
frames.
How about streaming the OpenGL commands
with better GPUs on smartphones nowadays?
9. 9
1 Android OpenGL ES Remote Rendering
OpenGL is composed of text commands w/
parameters and static assets.
Streaming compressed commands and play on
the client side.
10. 1
0
1 Android OpenGL ES Remote Rendering
Apitrace: record certain app frame by frame
and replay the file it dumped.
11. 1
1
1 Android OpenGL ES Remote Rendering
Apitrace: record certain app frame by frame
and replay the file it dumped.
Good compressing rate!
This show that maybe streaming these
commands is possible.
12. 1
2
1 Android OpenGL ES Remote Rendering
How to test it on android?
https://
github.com/apitrace/apitrace/blob/master/docs
/Dalvik.markdown
(The original building and running steps are not
usable, this document was modified by me)
13. 1
3
1 Android OpenGL ES Remote Rendering
Problem: apitrace is a debug tool for OpenGL
developers.
Traces are dumped to files, not real time
streaming.
So I sent the letter to the mailing list of
apitrace, asking how can I modify the code to
stream them in real-time.
14. 1
4
1 Android OpenGL ES Remote Rendering
Result: Similar technique is used in Android
emulator.
In /device/generic/goldfish/opengl
https://android.googlesource.com/device/gene
ric/goldfish/+/master/opengl/system/OpenglSy
stemCommon/HostConnection.cpp
15. 1
5
1 Android OpenGL ES Remote Rendering
Result: Similar technique is used in Android
emulator.
They use qemu pipe instead of tcp / ip
https://android.googlesource.com/platform/sdk/
+/
android-4.1.2_r2/emulator/opengl/DESIGN
But in HostConnection.cpp,
/* Set to 1 to use a QEMU pipe, or 0 for
a TCP connection */
#define USE_QEMU_PIPE 1
16. 1
6
1 Android OpenGL ES Remote Rendering
But in HostConnection.cpp,
/* Set to 1 to use a QEMU pipe, or 0 for
a TCP connection */
#define USE_QEMU_PIPE 1
I modified it and tried to run the emulator, but
it didn’t work. Still trying to let it work :(