2012-05-21 2 views
4

Возможно ли заменить glutMainLoop() на простой цикл (например, while или for) и в этом цикле просто вызвать все обратные вызовы?Можно ли заменить glutMainLoop() на простой цикл?

Я сделал это, и изображение отображается отлично, но окно (в котором отображается изображение) не отвечает (не может его переместить).

Действительно ли glutMainLoop() вызывает больше, чем обратные вызовы?

ответ

14

Если вы используете FreeGLUT, вы можете использовать glutMainLoopEvent. Он выполняет один цикл обработки цикла событий, поэтому вы можете вызвать его в цикле.

while(...) 
{ 
    glutMainLoopEvent(); 
    //do other stuff. 
} 
+0

Ницца! Я не знал об этом. –

+0

Отлично! Спасибо :) Это именно то, что мне нужно! – user1281071

2

glutMainLoop также обрабатывает все окна, поэтому, если вы хотите его заменить, вам потребуется либо использовать (другую) библиотеку для этого, либо написать системный код, разрешающий связь с операционной системой. Есть много примеров в Интернете, хотя, по крайней мере, для MS Windows.

Here's MSDN arcticle about Win32 main function.

1

ли glutMainLoop() называют более обратных вызовов?

Да, он несет ответственность за все управление событиями, как получение событий из вашей графической системы. Затем он вызывает обратные вызовы с данными события.

Если вы хотите сделать свою собственную обработку событий, не используйте GLUT. Существуют другие структуры, которые дают вам более низкий уровень доступа к событиям и ожидают, что вы будете выполнять все диспетчеризацию событий. Посмотрите GLFW и SDL.

Смежные вопросы