Is it at the end of your glutDisplayFunc() or glutMainLoop(),
Neither, because GLUT is not part of OpenGL. It's just some library (for creating simple OpenGL applications).
or is it at every vertex draw call?
From the programmers point of view it's not specified when it happens exactly. OpenGL has a command queue and things are asserted to be processed between them entering the command queue and reaching a so called "synchronization point". A synchronization point is any command that makes use or transfers data outside of the OpenGL context (like an image read with glReadPixels
) produced by former OpenGL commands.
For all practical means you can assume that vertices and fragments get processed, as soon as a whole primitive has been specified. So if you draw triangles, then every 3 vertices you got all you need to draw a triangle and processing it commences.