Glut перерисовывает только на экране, когда вы говорите или когда он решает. То есть, если вы ничего не делаете в окне, сцена не перерисовывается. Преимущество этого: меньше использования процессора / графического процессора. Недостаток: хорошо только для не анимированных приложений.
Если вы хотите постоянно обновлять экран (что и делается в приложениях с большим количеством анимаций (например, в играх)), вы можете использовать glutIdleFunc
http://www.opengl.org/resources/libraries/glut/spec3/node63.html
То есть в начале программы, когда вы устанавливаете все функции для перенасыщения, вы также пишете:
glutIdleFunc(RenderFunction);
Таким образом, когда glut бездействует, он продолжает вызывать вашу функцию рендеринга.
Если вы хотите рендерить медленнее, чем это возможно (например, с фиксированной частотой кадров), вы можете использовать таймер:
void RenderFunction()
{
glutTimerFunc(YOUR_DELAY_IN_MS, RenderFunction, 0);
/* rest of code */
}
и вместо glutIdleFunc(RenderFunction);
вы пишете
`glutTimerFunc(YOUR_DELAY_IN_MS, RenderFunction, 0);`
Для простого вызова функции рендеринга один раз (вы также можете просто написать RenderFunction()
один раз), и функция продолжает устанавливать таймер для следующего запуска.
В качестве примечания я предлагаю использовать SDL вместо перенасыщения.