|  | libAgl2 provides software GL ES 2.0 implementation using Pixelflinger2 in external/mesa3d | 
|  |  | 
|  | To build, enable Android.mk, which builds libGLES_android.so, then replace the one built from libAgl in system/lib/egl. | 
|  | ES 1.0 functions are not implemented and will cause exit, so do not setprop debug.egl.hw 0 until launcher is loaded. | 
|  |  | 
|  | All functions have little to none error checking. | 
|  | Not thread safe, Pixelflinger2 uses some static data. | 
|  |  | 
|  | Most shader functions are implemented, however, most Get* functions for shaders/programs/uniforms/attribs are not. | 
|  | No name system for shaders/programs, just using the pointers as names. | 
|  |  | 
|  | Basic glTexImage2D, glTexSubImage2D, glCopyImage2D and glCopySubImage2D are implemented, with a range of 8/16/24/32bpp formats. | 
|  | Cube map support is minimal. No mipmapping. | 
|  | TexParameter is mostly implemented, supports texcoord wrap modes, and only linear for both min and mag, or nearest for both min and mag filtering. | 
|  | Texture names are implemented, but bad. | 
|  |  | 
|  | Frame buffer and render buffers are not implemented. | 
|  |  | 
|  | Depth and stencil are implemented, but not tested. | 
|  | Blending seems to work. | 
|  | Colorbuffer supports RGBA_8888 and RGB_565. | 
|  |  | 
|  | Vertex buffer objects are implemented. | 
|  | Some GL_TRIANGLES and GL_TRIANGLE_STRIPS modes for glDrawArrays and glDrawElements are implemented, but vertex order is probably wrong so culling is disabled. | 
|  |  | 
|  | Basic apps should work, and some libhwui should work, except for frame buffer operations, which will cause exit. |