Multiplatform ANGLE Refactor Complete

ANGLE's multiplatform refactoring effort is now complete, paving the way for additional rendering backends, allowing ANGLE to enable OpenGL ES not just over Direct3D 9 and 11, but also desktop OpenGL.

The refactoring we‘ve done encapsulates D3D-related assumptions and API calls at the renderer level, so that no D3D calls are made in the renderer-agnostic portions of the codebase, and D3D-specific feature implementations won’t be included on non-D3D platforms. For example, the creation and maintenance of CPU-side copies of texture data, which are required to enable GL-style per-mip-level texture creation over D3D's entire-mipchain texture creation API, is contained entirely within the D3D renderers, allowing a GL implementation to avoid this complication.

Work will now begin within ANGLE to add a desktop OpenGL renderer, and EGL implementations compatible with OS X and Linux.

ES 3.0 Development Status

Our ES 3.0 development branch was merged into mainline ANGLE in April 2014, but ES 3.0 support is not yet complete. The majority of API functionality has been implemented; features still pending include:

  • ETC2/EAC support
  • primitive restart index
  • drawRangeElements
  • full GetProgramBinary support in core

Additional work remains in the compiler, including:

  • Array .length()
  • inf/nan detection
  • math utility functions, rounding
  • VertexID/InstanceID support
  • floating point packing functions
  • operators new in ES 3.0
  • name redeclaration
  • relaxed array indexing
  • switch statement support
  • loop & iteration improvements

ES 3.0 features should not be considered stable, even where implemented, and some features are present only via naive implementation so far, but we welcome bugs filed against this functionality, and thank all our contributors!