OpenGL ES (OpenGL for Embedded Systems) is a subset of the OpenGL 3D graphics API designed for embedded devices such as mobile phones, PDAs, and video game consoles. It is defined and promoted by the Khronos Group, a graphics hardware and software industry consortium interested in open APIs for graphics and multimedia.
In creating OpenGL ES 1.0 much functionality has been stripped from the original OpenGL API and a little bit added, two of the more significant differences between OpenGL ES and OpenGL are the removal of the glBeginÃ¢ÂÂglEnd calling semantics for primitive rendering (in favor of vertex arrays) and the introduction of fixed-point data types for vertex coordinates and attributes to better support the computational abilities of embedded processors, which often lack an FPU. Many other areas of functionality have been removed in version 1.0 to produce a lightweight interface: for example, quad and polygon primitive rendering, texgen, line and polygon stipple, polygon mode, antialiased polygon rendering (with alpha border fragments, not multisample), ARB_Image class pixel operation functionality, bitmaps, 3D texture, drawing to the frontbuffer, accumulation buffer, copy pixels, evaluators, selection, feedback, display lists, push and pop state attributes, two-sided lighting, and user defined clip planes.
Options for GP2X
- Vincent, an open source implementation of the OpenGL ES API. Early builds for gp2x are discussed here on the developer forum (see link).
- more OpenGL implementations (see 1.6)
- Klimt is an open-source 3D library, targeted for PDAs and mobile phones. Its API is very similiar to that defined in the OpenGL and OpenGL ES specifiations.
- GL2x is software OpenGL implementation being written from scratch for the GP2X by Andrew Wilkinson.
- TinySDGL has already been ported to the GP2X (download here)
- gpu940 is OpenGL-like software renderer for the GP2X (see link).
- Trenki's Software Renderer is a very fast (definitly faster than Vincent and TinyGL) low level renderer which allows one to write vertex and fragment shaders in C++. With the cmd940 Framework it can easily be ported to the second cpu and an OpenGL like interface could be layerd on top of it.
- Fusion2X is an OpenGL ES-CL 1.0 layer on top of Trenki's Software Renderer and implements most useful functionality. It is currently in Alpha state and would still require more optimizations since the raw software renderer is at least 1.25 times faster. It will never be as fast as the raw renderer though as OpenGL is simply too flexible (even OpenGL ES).