Evaluators allow the specification of polynomial functions of one or two variables whose values determine primitives' vertex coordinates, normal coordinates, color, or texture coordinates. A polynomial map, specified in terms of the Bezier basis[1] may be given for any of these groups of values. Once defined and enabled, the maps are invoked in one of two ways. The first way is to cause a single evaluation of each enabled map by specifying a point in the maps' domain using glEvalCoord. This command is meant to be placed between glBegin and glEnd so that individual primitives may be built each of which approximates a portion of a curve or surface. The second method is to specify a grid in domain space using glEvalMesh. Each vertex of the evaluated grid is a function of the defined polynomials. glEvalMesh generates its own primitives, and thus cannot be placed between glBegin and glEnd.
The evaluator interface provides a basis for building a more general curve and surface package on top of OpenGL. One advantage of providing the evaluators in OpenGL instead of a more complex NURBS interface is that applications that represent curves and surfaces as other than NURBS or that make use of special surface properties still have access to efficient polynomial evaluators (that may be implemented in graphics hardware) without incurring the costs of converting to a NURBS representation.