OpenGL technology

Initiated in 1992 by Silicon Graphics as a general CAD and 3D API for Unix-based X-terminals, OpenGL evolved out of SGI’s proprietary graphics library, IrisGL. Originally, use of OpenGL was restricted to business applications, such as industrial, interior and mechanical design, as well as statistical and scientific analysis.

However, the API gained ground with games developers following the development of a Windows version in 1996, and all the major PC 3D animation packages and even some of the lower-end packages were soon providing support for OpenGL acceleration. As 3D acceleration hardware entered the mainstream, SGI have revised their licensing terms to make OpenGL much more “open”, thereby cementing its position as the dominant cross-platform API for building interactive 2D and 3D graphics applications.

The OpenGL API is designed to address a wide array of advanced graphics rendering techniques, such as texture mapping (the ability to apply an image to a graphics surface), anti-aliasing, transparency, fog, lighting (the ability to calculate surface coloration when different lighting models are applied to the surface from one or more light sources), smooth shading (the ability to calculate shading effects when light hits a surface at an angle and results in subtle colour differences across the surface), motion blur and modelling transformation (the ability to change the location, size and perspective of an object in 3D co-ordinate space).

Its feature set is similar to that of Direct3D, but it is a lower-level API than its rival, providing very fine-grained control over the basic elements of 3D scene generation such as vertex and triangle information. An OpenGL application must supply all geometry information for each primitive (vertex, line or triangle) in a scene, as well as the effects to be applied to the primitive (colour, transparency, fogging and so on). The level of control it affords developers is the main factor behind claims that the OpenGL API is much easier to create applications for than Direct3D and is more reliable across different hardware platforms.

There are essentially two levels of hardware-accelerated support for OpenGL. ICDs (installable client drivers) accelerate lighting, transformations and rasterisation, and MCD (mini client servers) support rasterisation. While MCDs are easier for hardware vendors to write, ISDs offer superior performance.

Formed in 1992, the industry-wide Architecture Review Board (ARB) that governs the evolution and ongoing development of OpenGL aims to produce a new specification of the API every year. The OpenGL 1.4 and 1.5 specifications announced in the summer of 2002 and 2003 respectively each added significant new features and functionality. Importantly, the latter included OpenGL Shading Language, the API’s long awaited language specification for vertex- and pixel-shader programming, as an optional extension.

OpenGL Shading Language quickly became the most widely supported shading language for developing interactive graphics and visualisation applications, with implementations for UNIX, Microsoft Windows, Linux, and other operating systems. Following a year of extensive field testing, its official release was finally announced at the 2004 Siggraph tradeshow and launched the following autumn as the key component the OpenGL 2.0 specification.

In totality, the new features of OpenGL 2.0 comprised:

  • Programmable shading, with both OpenGL Shading Language and its APIs becoming core features of OpenGL. New functionality includes the ability to create shader and program objects; and the ability to write vertex and fragment shaders in OpenGL Shading Language.
  • Multiple render targets that enable programmable shaders to write different values to multiple output buffers in a single pass.
  • Non-power-of-two textures for all texture targets, thereby supporting rectangular textures and reducing memory consumption.
  • Two-sided stencil, with the ability to define stencil functionality for the front and back faces of primitives, improving performance of shadow volume and constructive solid geometry rendering algorithms.
  • Point sprites, which replace point texture co-ordinates with texture co-ordinates interpolated across the point. This allows drawing points as customised textures, useful for particle systems.

OpenGL 2.0 is fully backwards compatible with previous versions of the specification.