Among Android L's many, many features is one that will set game developers' hearts aflutter – support for the recently announced OpenGL ES 3.1. This is the cross-platform rendering API used in many games, both mobile and desktop. Android L's support for v3.1 of the standard brings a ton of new capabilities.
Here's the basic rundown of OpenGL ES 3.1.
- Compute shaders – applications can use the GPU to perform general computing tasks, tightly coupled with graphics rendering. Compute shaders are written in the GLSL ES shading language, and can share data with the graphics pipeline;
- Separate shader objects – applications can program the vertex and fragment shader stages of the GPU independently, and can mix and match vertex and fragment programs without an explicit linking step;
- Indirect draw commands - the GPU can be instructed to take draw command data from GPU mapped memory rather than passing that data through drivers. For example, this allows a compute shader running on the GPU to perform a physics simulation and then generate the draw command information needed to display the results, without CPU synchronization;
- Enhanced texturing functionality – including multisample textures, stencil textures, and texture gather;
- Shading language improvements – new arithmetic and bitfield operations, and features to enable modern styles of shader programming;
- Optional extensions – per-sample shading, advanced blending modes, and more;
- Backward compatibility with OpenGL ES 2.0 and 3.0 – programmers can add ES 3.1 functionality incrementally to working ES 2.0 and 3.0 applications.
This is all in addition to the Android Extension Pack, which adds some advanced capabilities like tessellation to Android. So basically, games are going to get prettier in Android L, but they will be backward compatible with devices running older versions of OpenGL.