29 February 2008

OpenGL for Embedded Systems

The early mobile 3D engines were all proprietary, and their rendering pipelines were implemented in software running on general-purpose CPUs. In 2002, to provide a baseline for portable 3D hardware acceleration, the Khronos Group began to design a 3D standard for mobile devices. The idea was to take OpenGL, the most widely deployed 3D API, as a starting point to produce a leaner and cleaner version: OpenGL ES (embedded systems). Simplification involved removing rarely used features (e.g., feedback and selection rendering modes, and functionality that's mostly syntactic sugar, such as the GL utility library). It also meant removing redundancy. For example, OpenGL provides a number of different ways of defining the rendering primitives. OpenGL ES provides only one: all vertex data is provided in arrays, and this results in a simpler implementation and faster execution. Also the set of supported geometric primitives is limited to points, lines, and triangles.

OpenGL ES retains most of the transformation and lighting pipeline of OpenGL. Only the back buffer is accessible for drawing and reading, however, and only the RGBA color mode (no indexed color mode) is supported. Features easily emulated using texture mapping (bitmaps and stippling of lines and polygons) were dropped; all key 2D texture-mapping features were retained. The OpenGL ES graphics pipeline shown in the adjacent figure has only a couple of well-defined points for providing input, and it has few outputs other than the values rendered into the frame buffer. Therefore, functionality in the back end, which cannot be easily replaced by the application programmer, is much more costly to remove than functionality in the front end of the pipeline. As a consequence, OpenGL ES supports almost all of the back-end functionality of OpenGL 1.3. For example, the blending modes that dictate how new fragments should be mixed with existing pixels in the frame buffer were retained in full, as were the various tests for determining whether a pixel should be drawn.

More information:

http://www.acmqueue.com/modules.php?name=Content&pa=showpage&pid=521