В моем приложении я делаю снимки содержимого QGLWidget для двух целей:
Первое, что я попробовал, это grabFrameBuffer()
. Естественно использовать эту функцию как для первого приложения, то, что в данный момент видно в виджете, это именно то, что я хочу кэшировать. ПРОБЛЕМА:На некоторых аппаратных средствах (, например. Интегрированная графика Intel, Mac OS X с графикой GeForce ), полученное изображение содержит не текущее содержимое экрана, а содержимое, предшествующее этому. Итак, если бы сцена рисовалась два раза, на экране вы видите второй рисунок, а на изображении вы видите первый рисунок (, который должен быть содержимым бэкбуфера? ).
Второе, что я попробовал, это renderToPixmap()
. Это визуализирует с использованием paintGL()
, но не с использованием paint()
. У меня все есть в paint()
, так как я использую функции рисования Qt, и только небольшая часть кода использует родной GL (beginNativePainting()
,endNativePainting()
).
Я также попробовал функцию моментального снимка обычного QWidget (QPixmap ::fromWidget (), или как она называется ), но там кадровый буфер GL черный.
Есть идеи, как решить проблему и получить достоверное изображение текущей сцены?