opengl glutmainloop()
Я только начал использовать OpenGL и кажется, что это не так просто понять работу glutMainLoop()
что на самом деле там происходит? Он остается там, ничего не делая, пока не ответит ни один из вызовов функции?
4 ответа
Он вызывает ваш обратный вызов дисплея снова и снова, вызывая режим ожидания между ними, чтобы он мог поддерживать определенную частоту кадров, если это возможно, и другие, если это необходимо (например, если вы изменяете размер окна или запускаете событие ввода).
По сути, внутри этой функции находится основной программный цикл, где GLUT выполняет большую часть работы за вас и позволяет вам просто настроить логику конкретной программы в этих обратных вызовах. Прошло много времени с тех пор, как я работал с GLUT, и поначалу это, безусловно, сбивает с толку.
В вашем отображении обратный вызов, очевидно, должен быть вашей основной логикой для рисования того, что должно происходить. В режиме ожидания обратного вызова должны быть некоторые очень легкие операции, чтобы определить, каким должно быть изменение состояния с момента последнего вызова дисплея до следующего раза. Например, если вы анимируете что-то, это будет то, где вы измените его положение или ориентацию.
Это именно так, как заявил StrixVaria.
glutMainLoop входит в цикл обработки событий GLUT. Эта процедура должна вызываться не более одного раза в программе GLUT. После вызова эта процедура никогда не вернется. Он будет вызывать по мере необходимости любые обратные вызовы, которые были зарегистрированы.
Взято отсюда
Совместное использование opengl и glut означает, что вы будете писать программу 'glut', которая использует команды opengl в функциях обратного вызова. main содержит функции перенасыщения. многим перенасыщенным функциям нужна функция обратного вызова для регистрации. Эти функции обратного вызова обычно содержат команды opengl.
Возвращаясь к вашему вопросу, теперь, когда становится ясно, что вы в основном пишете программу с переизбытком, следует также принять, что вызов функции glutMainLoop фактически выполняет функции обратного вызова по мере необходимости, которые, в свою очередь, выполняют команды opengl.
Что ж, glutMainLoop - это основная функция, которая продолжает вызывать и вызывать функции отображения и которая также держит ваше окно фактически открытым. Вы узнаете, что opengl не так страшен.