Окно OpenGL стерто окнами поверх него - PullRequest
0 голосов
/ 12 октября 2019

Я делаю стандартный оконный рендеринг OpenGL с Delphi & dglOpenGL;(Проблема может быть специфичной для любой пары windows & 3D). Целью является управление TFrame.

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

Но когда любое другое окно перекрывает окно OpenGL, т.е. перемещается пользователем или просто сфокусировано, 3D-изображение стирается.

example, right erased

Это происходит только в том случае, если Windows Aero отключен, то есть в Windows 7 с классической темой.

Замена управляемого событиями рендеринга управляемым циклом является огромным перебором;

Я пытался поймать сообщение WM_PAINT формы Delphi для выполнения рендеринга, когда что-то перемещается поверх формы, но, похоже, в этом случае в Delphi (или в Windows) сообщения полностью нет. Это странно, но кажется правдой - Windows не отправляет сообщения окну, если что-то движется поверх него. Хотя в этом случае вы ожидаете какой-то WM_PAINT_REGION.

Мои процедуры инициализации аналогичны этим Пример инициализации OpenGL

Вероятно, может помочь рендеринг в TBitmap, но этовыглядит плохим решением с точки зрения производительности и ощущается как более общая проблема (отсутствие двойной буферизации?). Может быть, существует какая-то простая инициализация или трюк OpenGL, чтобы это исправить?

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