The Khronos(tm) Group announced today it has publicly released the OpenGL(r) 3.1 specification that modernizes and streamlines the cross-platform, royalty-free API for 3D graphics. OpenGL 3.1 includes GLSL(tm) 1.40, a new version of the OpenGL shading language, and provides enhanced access to the latest generation of programmable graphics hardware through improved programmability, more efficient vertex processing, expanded texturing functionality and increased buffer management flexibility.
OpenGL 3.1 leverages the evolutionary model introduced in OpenGL 3.0 to dramatically streamline the API for simpler and more efficient software development, and accelerates the ongoing convergence with the widely available OpenGL ES mobile and embedded 3D API to unify application development. The OpenGL 3.1 specification enables developers to leverage state-of-the-art graphics hardware available on a significant number of installed GPUs across all desktop operating systems. According to Dr. Jon Peddie of Jon Peddie Research, a leading graphics market analyst in California, the installed base of graphics hardware that will support OpenGL 3.1 exceeds 100 million units. OpenGL 3.0 drivers are already shipping on AMD, NVIDIA and S3 GPUs.
Concurrently with the release of the OpenGL 3.1 specification, the OpenGL ARB has released an optional compatibility extension that enables application developers to access the OpenGL 1.X/OpenGL 2.X functionality removed in OpenGL 3.1, ensuring full backwards compatibility for applications that require it.
OpenGL 3.1 introduces a broad range of significant new features including:
- Texture Buffer Objects - a new texture type that holds a one-dimensional array of texels of a specified format, enabling extremely large arrays to be accessed by a shader, vital for a wide variety of GPU compute applications;
- Signed Normalized Textures - new integer texture formats that represent a value in the range [-1.0,1.0];
- Uniform Buffer Objects - enables rapid swapping of blocks of uniforms for flexible pipeline control, rapid updating of uniform values and sharing of uniform values across program objects;
- More samplers - now at least 16 texture image units must be accessible to vertex shaders in addition to the 16 already guaranteed to be accessible to fragment shaders;
- Primitive Restart - to easily restart an executing primitive - to efficiently draw a mesh with many triangle strips for example;
- Instancing - the ability to draw objects multiple times by re-using vertex data to reduce duplicated data and number of API calls;
- CopyBuffer API - accelerated copies from one buffer object to another, useful for many applications including those that share buffers with OpenCL(tm) 1.0 for advanced visual computing applications.