There's between being called once and being called regularly. GLUT will only issue a call to the display function when the contents is invalidated which typically happens when for example, the window is created, the window is resized, or when the window is moved behind other windows. Otherwise, the display callback is not called again unless you explicitly force a redisplay.
So, your display function is called once which explains why something is rendered, but not regularly which explains why nothing more is happening after that. You need to use the idle callback to keep the program busy all the time instead of idling when there's nothing new to display.
As soon as there's nothing else for GLUT to do, it calls the idle callback which then forces GLUT to redraw the window.
Hey this advice did the job! Maybe two more things I noticed here:
- I implemented a concole application which copied one array to another under the very same circumstances and it did work.
- I had to assign the idle()-function using glutIdleFunc() not glutIdleCallback() (this one wasn't even suggested by VS).
But now it works thanks a lot. You were right coming from XNA I assumed that display here would be somehow similar to the Draw() function which is called in regular intervals.