Files
android_development/tools/emulator/opengl
Jesse Hall 08d643e5eb EmuGL: Deliver every frame to a callback
To enable multi-touch on a tethered device, allow a callback to be
registered with the OpenGL renderer. On every frame, the framebuffer
is read into system memory and provided to the callback, so it can be
mirrored to the device.

This change is co-dependent on Idae3b026d52ed8dd666cbcdc3f3af80175c90ad3
in external/qemu.

Change-Id: I03c49bc55ed9e66ffb59462333181f77e7e46035
2012-03-22 13:29:00 -07:00
..
2012-03-07 07:24:21 -08:00
2012-03-06 16:13:03 -08:00
2012-01-05 10:50:01 -08:00

This directory contains the modules related to hardware OpenGL ES emulation.

I. Overview of components:
==========================

The 'emugen' tool is used to generate several source files related to the
EGL/GLES command stream used between the guest and the host during emulation.

  host/tools/emugen   -> emugen program

Note that emugen is capable of generating, from a single set of specification
files, three types of auto-generated sources:

  - sources to encode commands into a byte stream.
  - sources to decode the byte stream into commands.
  - sources to wrap normal procedural EGL/GLES calls into context-aware ones.

Modules under the system/ directory corresponds to code that runs on the
guest, and implement the marshalling of EGL/GLES commands into a stream of
bytes sent to the host through a fast pipe mechanism.

   system/GLESv1_enc        -> encoder for GLES 1.1 commands
   system/GLESv2_enc        -> encoder for GLES 2.0 commands
   system/renderControl_enc -> encoder for rendering control commands
   system/egl               -> emulator-specific guest EGL library
   system/GLESv1            -> emulator-specific guest GLES 1.1 library
   system/gralloc           -> emulator-specific gralloc module
   system/OpenglSystemCommon -> library of common routines

Modules under the host/ directory corresponds to code that runs on the
host, and implement the decoding of the command stream, translation of
EGL/GLES commands into desktop GL 2.0 ones, and rendering to an off-screen
buffer.

  host/libs/GLESv1_dec        -> decoder for GLES 1.1 commands
  host/libs/GLESv2_dec        -> decoder for GLES 2.0 commands
  host/libs/renderControl_dec -> decoder for rendering control commands

  host/libs/Translator/EGL    -> translator for EGL commands
  host/libs/Translator/GLES_CM -> translator for GLES 1.1 commands
  host/libs/Translator/GLES_V2 -> translator for GLES 2.0 commands
  host/libs/Translator/GLcommon -> library of common translation routines

  host/libs/libOpenglRender -> rendering library (uses all host libs above)
                               can be used by the 'renderer' program below,
                               or directly linked into the emulator UI program.

  host/renderer/ -> stand-alone renderer program executable.
                    this can run in head-less mode and receive requests from
                    several emulators at the same time. It is the receiving
                    end of all command streams.

Modules under the test/ directory correspond to test programs that are useful
to debug the various modules described above:

  tests/EGL_host_wrapper  -> a small library used to dynamically load the
                             desktop libEGL.so or a replacement named by the
                             ANDROID_EGL_LIB environment variable. This lib
                             provides all EGL entry points.

  tests/emulator_test_renderer -> a small program to run the rendering library
                                  in a single SDL window on the host desktop.

  tests/gles_android_wrapper -> guest EGL / GLES libraries that are run on
                                the device to run some tests. Replace the
                                system/egl and system/GLESv1 modules for now.

  tests/translator_tests/GLES_CM -> desktop GLESv1 translation unit test
  tests/translator_tests/GLES_V2 -> desktop GLESv2 translation unit test
  tests/translator_tests/MacCommon -> used by translation tests on Mac only.

  tests/ut_rendercontrol_enc -> guest library used by tests/ut_renderer
  tests/ut_rendercontrol_dec -> host library used by tests/ut_renderer
  tests/ut_renderer          -> unit-test for render control and rendering library.

                                
II. Build system considerations:
--------------------------------

The dependencies on the more than 20 components described in the previous
section are pretty sophisticated, involving lots of auto-generated code and
non-trivial placement for guest/device libraries.

To simplify the development and maintenance of these modules, a set of
helper GNU Make function is defined in common.mk, and included from the
Android.mk in this directory.

These functions all begin with the "emugl-" prefix, and can be used to
declare modules, what information they export to other modules, or import
from them, and also what kind of auto-generated sources they depend on.

Look at the comments inside common.mk and the Android.mk of the modules
to better understand what's happening.