OpenGL

OpenGL (Open Graphics Library) is a specification defining a cross-language cross-platform API for writing applications that produce 3D computer graphics (and 2D computer graphics as well). The interface consists of about 250 different function calls which can be used to draw complex three-dimensional scenes from simple primitives. It is very popular in the video games industry where it competes with Direct3D (on Microsoft Windows) (see Direct3D vs. OpenGL). OpenGL is used in CAD, virtual reality, scientific visualisation programs, information visualisation and video game development

Apple Inc. implemented the usage of OpenGL beginning with Mac OS X1.0.

Efficient implementations of OpenGL (leveraging graphics acceleration hardware to a greater or lesser extent) exist for Windows, many Unix platforms, and Mac OS. These implementations are generally provided by display device manufacturers and rely heavily on the hardware provided by that manufacturer. The open source library Mesa is a fully software-based graphics API which is code-compatible with OpenGL. However, for licensing reasons it claims merely to be a "very similar" API.

The OpenGL specification is overseen by the OpenGL Architecture Review Board (ARB), which was formed in 1992. The ARB consists of a set of companies with a vested interest in creating a consistent and widely available API. According to the official OpenGL website, voting members of the ARB as of November 2004 include 3Dlabs, Apple Inc., ATI Technologies, Dell, Inc., Evans & Sutherland, Hewlett-Packard, IBM, Intel, Matrox, Nvidia, SGI and Sun Microsystems. (Microsoft, one of the founding members, left in March 2003.)

Extensions
The OpenGL standard allows individual vendors to provide extended functionality through extensions as new technology is created. An extension is then distributed in two parts: as a header file which contains the extension's function prototypes, and as the vendor's device driver. Each vendor has an alphabetic abbreviation that is used in naming their new functions and constants. For example, Nvidia's abbreviation (NV) is used in defining their proprietary function  and their constant. It may happen that more than one vendor agrees to implement the same extended functionality. In that case, the abbreviation EXT is used. It may further happen that the Architecture Review Board "blesses" the extension. It then becomes known as a standard extension, and the abbreviation ARB is used. The first ARB extension was. Following the official extension promotion path, multitexturing is no longer an optionally implemented ARB extension, but has been a part of the OpenGL core API since version 1.4.

Several libraries are built on top of OpenGL to provide features not available in OpenGL itself:


 * GLU
 * GLUT
 * GLUI

In particular, the OpenGL Performer library, developed by SGI and available for IRIX, Linux, and several versions of Microsoft Windows, builds on OpenGL to enable the creation of hard real-time visual simulation applications.

Bindings
In order to enforce its multi-language and multi-platform characteristics, various bindings and ports have been developed for OpenGL in many languages. Most notably, the Java3D library can rely on OpenGL (Another option would be DirectX) for its hardware acceleration. Very recently, Sun has released beta versions of the JOGL system, which provides direct bindings to C OpenGL commands, unlike Java3D which does not provide such low level support. The OpenGL official page lists various bindings for Java, Fortran 90, Perl, Pike, Python, Ada, and Visual Basic. Bindings are also available for C++ and C#, see.

Higher Level Functionality
OpenGL was designed to be output-only: it provides only rendering functions. The core API has no concept of windowing systems, audio, printing, keyboard/mouse, or other input devices. While this seems restrictive at first, it allows the code that does the rendering to be completely independent of the operating system it is running on, allowing cross-platform development. However some integration with the native windowing system is required to allow clean interaction with the host system. This is preformed through the following add-on APIs:


 * GLX - X11 (including network transparency)
 * WGL - Microsoft Windows

Additionally the GLUT and SDL libraries provide functionality for basic windowing using OpenGL, in a portable manner.

History
OpenGL evolved from (and is very similar in style to) SGI's earlier 3D interface, IRIS GL. One of the restrictions of IRIS GL was that it only provided access to features supported by the underlying hardware. If the graphics hardware did not support a feature, then the application could not use it. OpenGL overcame this problem by providing support in software for features unsupported by hardware, allowing applications to use advanced graphics on relatively low-powered systems. The Fahrenheit project was a joint effort between Microsoft, SGI, and Hewlett-Packard with the goal of unifying the OpenGL and Direct3D interfaces. It initially showed some promise of bringing order to the world of interactive 3D computer graphics APIs, but due to financial constraints at SGI and general lack of industry support, it has since been abandoned.