Как точно контролировать перенасыщенность внутренней петли - PullRequest
3 голосов
/ 15 декабря 2011

Я хотел бы управлять основным циклом в программе перенасыщения, я хотел бы лучше понять, каков порядок выполнения следующих обратных вызовов:

glutDisplayFunc(drawGLScene);
glutIdleFunc(idle);
glutTimerFunc(TIMER_MS, update, 0);

Мне трудно понять, как происходит перенасыщениеставит в очередь эти вызовы в программе.

Ответы [ 2 ]

6 голосов
/ 15 декабря 2011

Как только вы захотите точно контролировать цикл событий, пора отказаться от GLUT. Используйте SDL, GLFW или делайте это с нуля. Понимание внутренней работы GLUT не поможет вам получить точный контроль.

1 голос
/ 15 декабря 2011

Вы не можете. Если вы хотите контролировать основной цикл, вам придется использовать что-то вроде GLFW. Freeglut, более современное расширение переизбытка может позволить вам сделать это. GLUT работает так, как вы указываете некоторые обратные вызовы, запускаете основной цикл, а затем он вызывает обратные вызовы всякий раз, когда это необходимо.

Вероятно, он вызывает обратный вызов таймера в начале кадра, чтобы вы могли обновить значение времени с момента последнего кадра, он, вероятно, вызывает обратный вызов дисплея всякий раз, когда ему нужно визуализировать кадр, и, вероятно, вызывает простоя обратный вызов всякий раз, когда он должен ждать перед рендерингом следующего кадра (возможно, в случае, если ваша частота кадров ограничена ровно 60 кадрами в секунду, поэтому если вы рендерите кадры менее чем за 0,017 секунды, то он, вероятно, будет вызывать обратный вызов в режиме ожидания, пока он не будет готов к выдвинуть рамку на экран).

...