Как использовать wxGLCanvas в wxFrame с двойной буферизацией?

Мое приложение wxWidgets имеет основной wxFrame с wxAUIManager. В четырех панелях у меня есть wxTreeCtrl, wxNotebook (в wxPanel для управления мерцанием), wxListBox и wxGLCanvas соответственно.

Чтобы решить проблему мерцания, я хотел бы иметь двойную буферизацию wxFrame. Это, однако, мешает рендерингу wxGLCanvas (я думаю, это связано с двойной буферизацией самого wxGLCanvas).

Есть ли способ использовать wxGLCanvas в качестве дочернего элемента wxFrame с двойной буферизацией без искажения рендеринга?

Я использую wxWidgets 3.1.0 на компьютере с Windows 10.

Обновление:
Под "искаженным рендерингом" я подразумеваю, что моя геометрия не визуализируется. Когда размеры панелей основного wxFrame изменяются, они закрашиваются поверх GLCanvas и остаются закрашенными поверх GLCanvas, даже если панели сохраняют свой первоначальный размер.

Я также попытался воспроизвести эту проблему в примере с кубом в примерах wxWidgets, но там все работает.


person marcks    schedule 04.02.2017    source источник
comment
Что вы подразумеваете под нарушением/искажением рендеринга?   -  person Ripi2    schedule 05.02.2017
comment
@marcks, какую версию wx ты используешь? Какая ОС/инструментарий? Можете ли вы создать пример того, что вы делаете?   -  person Igor    schedule 05.02.2017
comment
Взгляните на samples/opengl/cube.   -  person macroland    schedule 06.02.2017
comment
Я обновил вопрос, чтобы прояснить проблему. У меня нет такой же проблемы в образце куба. К сожалению, я не могу привести простой пример, показывающий проблему. Мне кажется, что GLcanvas никогда не перерисовывает, когда wxFrame использует двойную буферизацию.   -  person marcks    schedule 06.02.2017


Ответы (1)


IMO, вы должны выполнять рендеринг каждый раз, когда GLCanvas меняет свой размер. Кроме того, обработайте это событие размера GLCanvas после того, как его обработают остальные панели (последнее обработанное событие размера отправляется в GLCanvas).

person Ripi2    schedule 06.02.2017