Skip to content

andocker/libandroid-emugl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This directory contains the host-side modules related to hardware OpenGL ES
emulation. The guest-side modules are in
$ANDROID_BUILD_TOP/device/generic/goldfish/opengl

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published