An OpenGL® class can either refer to an object-oriented implementation of parts of the OpenGL® abstract programming interface (API), or to a class that uses OpenGL® function calls within its own code. The nature of the OpenGL® library means there really was no support for an object oriented version of the API, and most programs called the functions as they were written, outside a class. As object oriented languages became more prevalent, different OpenGL® class libraries appeared to act as wrapper objects for the core library. There are benefits to using an OpenGL® class that has been fully realized instead of just the collection of functions provided in the library, including encapsulation and a way to derive new functional classes through inheritance while protecting the basic implementation. Not all developers use an OpenGL® class library, because it can be confusing to switch to fully object oriented programming paradigms.
In object oriented programming, a class is a collection of data, variables and functions, called methods, which modify the information it contains. The origins of OpenGL® as a library of functions for the C programming language, which was not an object oriented language, means some of the methodologies and programming practices that developed were not well suited to object oriented programming. When some operating systems and other devices began to rely more on object oriented languages, several OpenGL® class libraries came into existence.
Some of the OpenGL® class libraries simply encapsulated the basic OpenGL® functions. This provided a safe and compatible framework for programming. Although this type of class was necessary for some languages, it still required supporting classes to be made into a functional application. Truly organized libraries actually divided the OpenGL® functions into a series of classes, with each one managing a different element of the library, such as rendering.
A number of OpenGL® class libraries started to expand on the basic OpenGL® engine and began to include more functionality. This primarily included a special class for handling the objects in a scene, called a scene graph. These classes acted as wrappers for the core libraries while providing a logical structure that could be built on to make a program that did more than render a scene and exit without having to invent a new OpenGL® framework every time.
Nearly every OpenGL® library, including utility libraries, has been translated in one way or another into an object oriented form. This has, in some instances, made it easier for developers to keep OpenGL® updated on the various devices that exist by forming a mostly uniform blueprint for how to implement OpenGL® in an object oriented environment. With the addition of object oriented development tools, it also has made it possible to drag and drop an OpenGL® class into a program that supports visual development, simplifying some of the more complicated aspects.