Files
android_development/tools/emulator/opengl
Liran 3c457bda2f GLES2 translaotr: fix glLinkProgram and object names
Do not allow glLinkProgram to succeed if only one shader type has been
attached to the program, GL allows this, but GLES2 does not.
added state tracking for program objects to check which shaders are
attached to the program object.

add a way to define object data type being held for each object in objectNameManager
ProgramData and ShaderParser are both valid objectData for objects in SHADER namespace
we need a way to determine object type to generate correct errors

Change-Id: Ic232549df0bb6daf6ec528cb039482cd68e896bb
2011-07-27 15:19:04 +03:00
..
2011-07-14 23:29:32 +02:00

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

For now, this feature is experimental, and *nothing* will be built unless
you define BUILD_EMULATOR_OPENGL in your environment, for example with:

  export BUILD_EMULATOR_OPENGL=true

You can also define the following to enable the "gralloc" module, which
corresponds to system-wide GLES emulation (by default, only a specific set
of applications are enabled, see below):

  export BUILD_EMULATOR_OPENGL_DRIVER=true


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.