opengl glutmainloop () - PullRequest
       15

opengl glutmainloop ()

16 голосов
/ 07 декабря 2009

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

Ответы [ 4 ]

19 голосов
/ 07 декабря 2009

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

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

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

4 голосов
/ 07 декабря 2009

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

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

Взято из здесь

2 голосов
/ 07 сентября 2015

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

2 голосов
/ 17 апреля 2014

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

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

...