1. In a GLUT program, how is control passed back to the programmer? How is this set up during initialization?
Control is passed to the programmer in the form of callback functions (functions that will be called when events occur, e.g. when the window needs to be drawn or when a key is pressed). This is set up during initialization through calls to functions such as glutDisplayFunc, glutReshapeFunc and glutKeyboardFunc. Each of these functions takes as an argument a function pointer indicating the function to be called when that event occurs.
2. What does the parameter to glutInitDisplayMode() specify?
The mode parameter controls options such as the color model (GLUT_RGB, GLUT_RGBA or GLUT_INDEX) and buffering of color buffers (GLUT_SINGLE or GLUT_DOUBLE). The value passed is a logical OR of these options.
3. What do the calls to glOrtho() and glViewport() accomplish?
glOrtho() defines a clipping window, i.e. a mapping between a relative coordinate frame and the pixels displayed on-screen. For example, the call glOrtho(-1., 1., -1., 1., -1., 1.) indicates that a vertex at position (-1, -1) should be drawn in the lower-left corner of the window, and that a vertex at (1, 1) should be drawn in the upper-right.
glViewport() allows us to use only part of the window as the "drawing canvas." Its parameters (in pixels) indicate which rectangular area should be used.