Как обновить отображение в OpenGL во время обработки? - PullRequest
3 голосов
/ 01 апреля 2011

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

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

Это то, что происходит в настоящее время.Отображается исходное изображение, функция цветовой кластеризации выполняется из функции обратного вызова клавиатуры, изображение обрабатывается, и обновленное изображение отображается, когда управление программой вышло из функции цветовой кластеризации.

Я пытался вызвать glutPostRedisplay() после каждой итерации алгоритма кластеризации, и я попытался использовать обратный вызов glutIdleFunc с glutPostRedisplay ().В обоих случаях он не вызывает обратный вызов дисплея, пока изображение не завершит обработку.

Как я могу обновить изображение (т.е. вызвать обратный вызов дисплея) во время обработки изображения?

Ответы [ 3 ]

4 голосов
/ 01 апреля 2011

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

colourClustering()
{
    loop
    {
        image processing code
    }
    display()  // Previously I tried using glutPostRedisplay() here.
}

...

display()
{
    drawing code
    glutSwapBuffers()
}

...

main()
{
    ....
    glutDisplayFunc(display);
    ....
}

Однако это похоже на обходной путь, а не реальное решение.

2 голосов
/ 01 апреля 2011

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

0 голосов
/ 27 февраля 2013

Я знаю его старый вопрос, но я вызываю glFinish ();заставляет это появиться немедленно для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...