544 VII Software Design
2011. ANGLE also provides an implementation of the EGL 1.4 speciﬁcation
TransGaming did the primary development for ANGLE and provides continued
maintenance and feature enhancements. The development of ANGLE was spon-
sored by Google to enable browsers like Google Chrome to run WebGL content on
Windows computers that may not have OpenGL drivers [Bridge 10].
ANGLE is used as the default WebGL backend for both Google Chrome and
Mozilla Firefox on Windows platforms. Chrome, in fact, uses ANGLE for all graph-
ics rendering, including for the accelerated Canvas2D implementation and for the
Native Client sandbox environment.
In addition to providing an OpenGL ES 2.0 implementation for Windows, por-
tions of the ANGLE shader compiler are used as a shader validator and translator
by WebGL implementations across multiple platforms. It is used on Mac OS X
(Chrome, Firefox, and Safari), Linux (Chrome and Firefox), and in mobile variants
of the browsers. Having one shader validator helps to ensure that a consistent set
of GLSL ES (ESSL) shaders are accepted across browsers and platforms. The shader
translator is also used to translate shaders to other shading languages and to option-
ally apply shader modiﬁcations to work around bugs or quirks in the native graphics
drivers. The translator targets Desktop GLSL, Direct3D HLSL, and even ESSL for
native OpenGL ES 2.0 platforms.
Because ANGLE provides OpenGL ES 2.0 and EGL 1.4 libraries for Windows,
it can be used as a development tool by developers who want to target applications
for mobile, embedded, set-top, and Smart TV–based devices. Prototyping and initial
development can be done in the developer’s familiar Windows-based development
environment before ﬁnal on-device performance tuning. Portability tools such as the
GameTree TV SDK [TransGaming 11] can further help to streamline this process
by making it possible to run Win32 and OpenGL ES 2.0-based applications directly
on set-top boxes. ANGLE also provides developers with an additional option for
deploying production versions of their applications to the desktop, either for content
that was initially developed on Windows, or for deploying OpenGL ES 2.0–based
content from other platforms such as iOS or Android.
ANGLE is implemented in C++ and uses Direct3D 9 [ MSDN 11c] for rendering.
This API was chosen to allow us to target our implementation at Windows XP, Vista,
and 7, as well as providing access to a b road base of graphics hardware. ANGLE
requires a minimum of Shader Model (SM) 2 support, but due to the limited capa-
bilities of SM2, the primary target for our implementation is SM3. There are some
implementation variances, and in some cases, completely different approaches used,
in order to account for the different set of capabilities between SM2 and SM3. Since