Matrix Transformations: Vertices and normals are transformed by the modelview and projection matrices before they are used to produce an image in the frame buffer.
Lighting and Coloring: Calculations for lighting conditions and material properties are performed.
Generating Texture Coordinates: Rather than explicitly supplying texture coordinates, you can have OpenGL generate them as a function of other vertex data. After the texture coordinates have been specified or generated, they are transformed by the texture matrix.
Primitive Assembly: Vertices are assembled into primitives—points, line segments, or polygons—together with the relevant edge flag, color, and texture information for each vertex.
Primitives -> Fragments: Primitives are converted to pixel fragments in several steps: primitives are clipped, necessary adjustments are made to the color and texture data, and the relevant coordinates are transformed to window coordinates. Finally, rasterization converts the clipped primitives to pixel fragments.
Clipping happens in two steps. Application-specific clipping clipps primitives in eye coordinates (the space behind the camera is clipped). In view volume clipping: primitives are transformed by the projection matrix into clip coordinates and clipped by the corresponding viewing volume.
Transforming to Window Coordinates: Before clip coordinates can be converted to window coordinates, they are normalized by dividing by the value of w to yield normalized device coordinates (range -1..+1). After that, the viewport transformation applied to these normalized coordinates produces window coordinates.
Rasterization is the process by which a primitive is converted to a two-dimensional image. Each point of this image contains such information as color, depth, and texture data. Together, a point and its associated information are called a fragment.
Texture Memory: Texturing maps a portion of a specified texture image onto each primitive by using the location indicated by a fragment's texture coordinates.
Per-Fragment-Operations: OpenGL allows a fragment produced by rasterization to modify the corresponding pixel in the frame buffer only if it passes a series of tests. If it does pass, the fragment's data can be used directly to replace the existing frame buffer values, or it can be combined with existing data in the frame buffer, depending on the state of certain modes.
Frame-buffer and Pixel Transfer: The frame buffer is organized into a set of logical buffers—the color, depth, stencil, and accumulation buffers. You can directly read, write or copy pixels from them.
Selection and Feedback (picking): Selection, feedback, and rendering are mutually exclusive modes of operation. Rendering is the normal, default mode during which fragments are produced by rasterization; in selection and feedback modes, no fragments are produced and therefore no frame buffer modification occurs. In selection mode, you can determine which primitives would be drawn into some region of a window; in feedback mode, information about primitives that would be rasterized is fed back to the application.