The Open Graphics Library® (OpenGL®) is primarily a programming interface that allows software applications to interact with graphics hardware and create three-dimensional (3D) scenes quickly and efficiently. Using two-dimensional (2D) OpenGL® programming techniques, the hardware acceleration provided by the library can enhance the performance and, sometimes, the ease of programming software that does not necessarily employ 3D models or transformations. The most common method of using 2D OpenGL® is to draw quadrilaterals, or rectangles, that are textured with an image, effectively creating an object in 3D space out of an image. Once established, these quadrilaterals can be manipulated, either with strict 2D methods or by being transformed with 3D matrices for special effects that otherwise would be difficult to do with only 2D raster graphics. There are some complications that using a 3D library brings when employing it only for 2D graphics, including hyper-precision that can make it complex to isolate single-pixel locations, as well as demanding some 3D hardware support for a program that might not truly require it.
Many hardware and software developers provide drivers and custom abstract programming interfaces (APIs) that make their particular products fully compatible with the OpenGL® library. This widespread acceptance of an open standard gives programmers a way to directly access the hardware on a large variety of systems. The hardware acceleration provided when using 2D OpenGL® can allow a program to run more smoothly than otherwise would be possible. This speed is balanced by the fact that using the OpenGL® pipeline for graphics can be very different from using traditional 2D programming methods that do not generally employ a state machine model like OpenGL® does.
Most 2D OpenGL® programs use flat rectangles that are made in the same proportions as a texture image to portray the graphics. This has the advantage of being very quick to render, as well as simplifying programming so it uses some of the same logic as raster-based buffered graphics. Some effects, such as scaling an image, rotating an image or reversing an image, can actually be performed much more efficiently using OpenGL®.
There are certain factors that can cause 2D OpenGL® programs to be more complex than other 2D programs might normally be. One of these factors is the precision of pixels on the display. OpenGL® does not equate one part of the virtual coordinate system to one pixel on a screen, like raster graphics do, so floating point numbers sometimes need to be used for screen coordinates to prevent gaps in the display or strange pixel placements.
Another issue is that OpenGL® requires the use of a graphics card to increase the render speed. If an application is using OpenGL® for the display of an interface or system window, then devices that do not have graphics acceleration could suffer a loss of performance for graphics that might seem very basic to an end user. OpenGL also does not provide any native support for displaying text, meaning that showing large areas of text could require a fair amount of custom code.