En mi solicitud tomo instantáneas de contenido de un QGLWidget para dos propósitos:Cómo tomar instantáneas QGLWidget fiable
- se vuelve a dibujar la escena todo el tiempo cuando sólo una superposición cambios, utilizando un mapa de pixels en caché en lugar
- Lat el usuario toma capturas de pantalla de los trazados particulares (escena 3D)
Lo primero que probé es grabFrameBuffer()
. Es natural usar esta función como para la primera aplicación, lo que está visible actualmente en el widget es exactamente lo que quiero almacenar en caché. PROBLEMA: En algunos hardware (por ejemplo, gráficos Intel integrade, Mac OS X con gráficos GeForce), la imagen obtenida no contiene el contenido de la pantalla actual, sino el contenido anterior. Entonces, si la escena se dibujara dos veces, en la pantalla verá el segundo dibujo, en la imagen verá el primer dibujo (¿cuál debería ser el contenido del backbuffer?).
Lo segundo que probé es renderToPixmap()
. Esto se representa usando paintGL()
, pero no usando paint()
. Tengo todas mis cosas en paint()
, ya que utilizo la funcionalidad de pintura de Qt y solo una pequeña parte del código utiliza GL nativo (beginNativePainting()
, endNativePainting()
).
También probé la capacidad de captura instantánea de QWidget (QPixmap :: fromWidget(), o cómo se llama), pero allí el framebuffer GL es negro.
¿Alguna idea sobre cómo resolver el problema y obtener una representación confiable de la escena actualmente dibujada?
Terminé trabajando con un FBO. – ypnos