Как перерисовать картинку при перемещении окон в openGL? - PullRequest
3 голосов
/ 21 марта 2010

Я нарисовал картинку с openGL на своих окнах. Теперь, когда я держу кнопку мыши на окнах и перемещаю ее, изображение всегда искажается. Я не знаю, какая функция в openGL может помочь мне перерисовать картинку при перемещении окон. Кто-нибудь может помочь?

Я пробовал это, но, кажется, не работает:

void myDisplay()
{
   .....
}

void reshape(int x, int y)
{
   glutPostRedisplay();
}

int main()
{
   .....
   glutDisplayFunc(myDisplay);
   glutReshapeFunc(reshape);
}

Ответы [ 3 ]

2 голосов
/ 03 ноября 2010

Добавить функцию glutIdleFunc

int main()
{
   .....
   glutDisplayFunc(myDisplay);
   glutIdleFunc(myDisplay);
   glutReshapeFunc(reshape);
}
2 голосов
/ 21 марта 2010

Первым (и обычно единственным) необходимым шагом является прекращение использования перенасыщения. glut ориентирован в первую очередь на создание статического дисплея, поэтому он пытается накапливать изменения и затем перерисовывать их только тогда, когда состояние снова «стабилизировалось», например, когда вы сделали изменив размеры окна. Когда-то это имело смысл, но больше не имеет значения.

Учитывая, что с момента последнего обновления перенасыщения прошло около 10 лет, устаревшие цели дизайна вряд ли являются сюрпризом. Это не меняет того факта, что он тщательно написан, чтобы предотвратить то, что вы хотите. Если вы хотите, вы можете переписать его так, чтобы он лучше соответствовал вашим ожиданиям, но почти наверняка будет гораздо проще использовать что-то другое, предназначенное для того, что вы хотите (или, по крайней мере, что-то более близкое к тому, что вы хотите).

0 голосов
/ 24 марта 2011

Решение, которое работало для меня, состояло в том, чтобы пропустить выполнение функций InvalidateRect / RedrawWindow после вызова MoveWindow на WM_MOUSEMOVE (я не использую перенасыщение)Потому что обычно имеет смысл выполнить InvalidateRect (wnd, 0,0) после всех событий мыши / клавиатуры, но при непосредственном вызове его после MoveWindow содержимое окна «остается позади» при перетаскивании.

...