Я делаю стандартный оконный рендеринг OpenGL с Delphi & dglOpenGL;(Проблема может быть специфичной для любой пары windows & 3D). Целью является управление TFrame.
Но мы пытаемся избежать бесконечного цикла отрисовки для оптимизации веса интерфейса. Это означает, что вместо рисования по таймеру я пытаюсь охватить необходимые события рисования.
Но когда любое другое окно перекрывает окно OpenGL, т.е. перемещается пользователем или просто сфокусировано, 3D-изображение стирается.
Это происходит только в том случае, если Windows Aero отключен, то есть в Windows 7 с классической темой.
Замена управляемого событиями рендеринга управляемым циклом является огромным перебором;
Я пытался поймать сообщение WM_PAINT формы Delphi для выполнения рендеринга, когда что-то перемещается поверх формы, но, похоже, в этом случае в Delphi (или в Windows) сообщения полностью нет. Это странно, но кажется правдой - Windows не отправляет сообщения окну, если что-то движется поверх него. Хотя в этом случае вы ожидаете какой-то WM_PAINT_REGION.
Мои процедуры инициализации аналогичны этим Пример инициализации OpenGL
Вероятно, может помочь рендеринг в TBitmap, но этовыглядит плохим решением с точки зрения производительности и ощущается как более общая проблема (отсутствие двойной буферизации?). Может быть, существует какая-то простая инициализация или трюк OpenGL, чтобы это исправить?