Как перерисовать картинку при перемещении окон в openGL?

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

Я пробовал это, но, похоже, не работает:

void myDisplay()
{
   .....
}

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

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

person Community    schedule 20.03.2010    source источник


Ответы (3)


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

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

person Jerry Coffin    schedule 21.03.2010

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

int main()
{
   .....
   glutDisplayFunc(myDisplay);
   glutIdleFunc(myDisplay);
   glutReshapeFunc(reshape);
}
person Mig    schedule 03.11.2010

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

person AareP    schedule 24.03.2011