opengl glutmainloop()

Я только начал использовать OpenGL и кажется, что это не так просто понять работу glutMainLoop() что на самом деле там происходит? Он остается там, ничего не делая, пока не ответит ни один из вызовов функции?

4 ответа

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

По сути, внутри этой функции находится основной программный цикл, где GLUT выполняет большую часть работы за вас и позволяет вам просто настроить логику конкретной программы в этих обратных вызовах. Прошло много времени с тех пор, как я работал с GLUT, и поначалу это, безусловно, сбивает с толку.

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

Это именно так, как заявил StrixVaria.

glutMainLoop входит в цикл обработки событий GLUT. Эта процедура должна вызываться не более одного раза в программе GLUT. После вызова эта процедура никогда не вернется. Он будет вызывать по мере необходимости любые обратные вызовы, которые были зарегистрированы.

Взято отсюда

Совместное использование opengl и glut означает, что вы будете писать программу 'glut', которая использует команды opengl в функциях обратного вызова. main содержит функции перенасыщения. многим перенасыщенным функциям нужна функция обратного вызова для регистрации. Эти функции обратного вызова обычно содержат команды opengl.

Возвращаясь к вашему вопросу, теперь, когда становится ясно, что вы в основном пишете программу с переизбытком, следует также принять, что вызов функции glutMainLoop фактически выполняет функции обратного вызова по мере необходимости, которые, в свою очередь, выполняют команды opengl.

Что ж, glutMainLoop - это основная функция, которая продолжает вызывать и вызывать функции отображения и которая также держит ваше окно фактически открытым. Вы узнаете, что opengl не так страшен.

Другие вопросы по тегам