19 Curves, Surfaces, and Using Evaluators
OpenGL evaluators use a Bezier basis. To render a surface using any other basis, such as B-spline, you must convert your control points to a Bezier basis. The OpenGL Programming Guide, Chapter 12, lists a number of reference books that cover the math behind these conversions.
OpenGL does not provide a straightforward mechanism for this.
You might download the Mesa source code distribution, and modify its evaluator code to return object coordinates rather than pass them into the OpenGL geometry pipeline.
Evaluators involve a lot of math, so their performance in immediate mode is sometimes unacceptable. Some programmers think they need to "capture" the generated geometry, and play it back to achieve maximum performance. Indeed, this would be a good solution if it were possible. Some implementations provide maximum evaluator performance through the use of display lists.