OpenGL (Open Graphics Library) was created by Silicon Graphics as the successor to their own in-house graphics library, IRIS GL. At the time, all graphics workstation vendors developed their own, incompatable libraries which caused most 3D graphics programs to be extremely un-portable. As a result, SGI announced, in 1989, a new unifying standardized graphics library for everyone called, OpenGL. Work progressed quickly and in 1991, the first OpenGL Architectural Review Board (ARB) meetings were held, with the first commercial implementations of the new standard released the following year.
As with IRIS GL, OpenGL is a window system independent API and uses a variety of different matrices for transformations. This means that it only has rendering functionality. It is not tied with any one environment (i.e. X Window System, Microsoft Windows, Mac OS, etc.). This functionality allows for maximum portablilty. There have been window toolkits have been devised for OpenGL, namely, GLUT, the OpenGL Utility Toolkit. Also note that OpenGL was designed for C although extensions have been made for other languages.
When OpenGL first came out, its main, rival, was the ISO and United States government standard, PEX (PHIGS Extension to X). To promote OpenGL, Silicon Graphics mounted a massive marketing campaign (Fueling bitter flame wars as well.) to prove superiority over PEX. Eventually, PEX lost the battle.
Today OpenGL is the standard for 2D/3D graphics development with competition from Microsoft's DirectX/Direct3D APIs. Free clones, and toolkits exist for it such as Mesa and Open Inventor. Current specification is 1.2.
OpenGL is a fairly straight-forward API, a simple wire-frame cube is created as such (With GLUT for window managment):
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
/* Compiled on IRIX with cc -o cube cube.c -lglut -lGL -lXext */
int init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0); /* Clear color-index */
glShadeModel(GL_FLAT); /* Single color shading */
}
int display(void)
{
glClear(GL_COLOR_BUFFER_BIT); /* Clear the colorbuffer */
glColor3f(/* Red* / 1.0, /* Green */ 1.0, /* Blue */ 1.0);
GlLoadIdentity(); /* Clear the matrix */
/* Set camera position, angle */
gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
GlScalef(1.0, 2.0, 1.0); /* Modeling transformation */
glutWireCube(1.0);
glFlush(); /* Clear buffer; force (re)draw */
}
int reshape(int w, int h)
{
glViewport(0, 0, (GLSize1) w, GLSizei) h); /* Scale display */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); /* Implies projection (human) camera view */
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char **argv)
{
/* Setup GLUT */
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); /* Single buffer, color */
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFuc(reshape);
glutMainLoop();
return 0;
}
For all those curious, yes, SGI has managed to implement the OpenGL API on a chip, and it can be found in the SGI Fuel. Here's a snippet from SGI's site:
VPro graphics features OpenGL on a ChipTM for full hardware acceleration of the OpenGL 1.2 pipeline and also offers hardware acceleration of the OpenGL ARB imaging extensions.
Yes, it's brief, please /msg me with any additional info.