OpenGL ES has taken a huge leap forward. The 2D/3D graphics specification is rarely talked about outside the gaming community, and the version number of “3.1” implies a small improvement. On the contrary.
OpenGL ES for Embedded Systems is a lightweight version of the huge Open Graphics Library, or OpenGL.
OpenGL has been around since the early 1990s, and it runs on big systems: traditionally workstations and servers used to, say, render movies or do high-end ray tracing for scientific projects. OpenGL ES appeared much later, and is what you’ll find on smartphones, tablets, game consoles and other small systems. OpenGL ES is optimized for what I’d characterize and “render, display and toss” animations executed quickly and to the limit of a screen’s resolution.
In today’s mobile-heavy world, OpenGL ES is incorporated into both Android and iOS, as well as BlackBerry and Raspberry Pi. (As far as I can tell, OpenGL ES is not supported on Windows 8, even when running on devices like the Microsoft Surface or on a Windows Phone. Microsoft supports its own lightweight rendering protocol, DirectX, and there are tools, like ANGLE, to help developers port OpenGL ES API calls to DirectX.)
OpenGL ES 3.0, which appeared in August 2012, has achieved pretty good penetration, running on many Google Nexus devices, as well as a few Android phones and tablets from HTC, LG, Samsung and Sony, plus Apple’s iPhone 5s, iPad Air and iPad mini with Retina Display. It’s also on BlackBerry OS 10. There’s a much longer list of devices running OpenGL ES 2.0, which dates back to 2008; it takes a while for GPUs and operating systems to catch up with new specs like this, and then appear in devices.
What’s new in OpenGL ES 3.1? According to the Khronos Group (which shepherds both the OpenGL and OpenGL ES specifications), here are the changes:
• 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 commands from its memory rather than waiting for commands from the CPU. For example, this allows a compute shader running on the GPU to perform a physics simulation and then generate the draw commands needed to display the results, without CPU intervention
• 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
That sounds a bit dry, but the graphics rendered by OpenGL ES 3.1 are stunning. This isn’t about showing movies: For the first time, games and apps running on phones and tablets can display the same photorealistic real-time visuals as high-powered desktops. Absolutely stunning.
Sadly, the only demo that I can find to share is a video on YouTube, which is quite underwhelming. There are some nice stills on the Intel website.
See the Khronos site for detailed specifications for OpenGL ES 3.1, and rethink what high-end real-time 2D/3D rendering means in today’s mobile environment.
Alan Zeichick, founding editor of SD Times, is principal analyst of Camden Associates.