java - library - lwjgl
Dibujar fuera de pantalla con JOGL (2)
Debería buscar en el método: glReadPixels () más información aquí . Básicamente funciona más o menos así:
Init(); //doing some initializations in your JOGL app
glDrawBuffer(GL_BACK);
DrawGLScene(); //doing drawing here
glReadBuffer(GL_BACK);
//Copy the image to the array imageData
glReadPixels(0, 0, WIDTH, HEIGHT, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
Como parte de un proyecto más grande, estoy tratando de implementar una instalación utilizando JOGL que exportará representaciones 3D a formatos de mapa de bits. Hacemos esto creando un GLJPanel y dibujando la escena que queremos, luego extrayendo el mapa de bits. Todo esto funciona bien siempre que el sistema tenga al menos una ventana visible en la pantalla, no necesariamente la ventana que contiene el panel al que estamos recurriendo.
Pero si tratamos de hacer esto sin hacer ninguna ventana visible, el GLJPanel no dibujará. Pasando por la fuente de JOGL encuentro que no se dibujará a menos que tenga un par válido, esencialmente a menos que se haya llamado a addNotify (). La documentación dice que addNotify () solo se llama cuando el panel se hace parte de una jerarquía de ventana visible. Cambiar a un GLCanvas no hace mucha diferencia: el modo de falla es diferente. WindowsOnscreenGLDrawable.realized no está configurado, y esto significa que lockSurface devuelve LOCK_SURFACE_NOT_READY
, lo que hace que makeCurrent () falle.
Cualquier ayuda sería bienvenida sobre cómo crear una aplicación Java que pueda crear y exportar escenas 3D sin tener que hacer que su ventana sea visible.
No estoy seguro de si debería responder mi propia pregunta, pero aquí está lo que encontré que parece funcionar ahora.
La clave es GLPbuffer , que es un GLAutoDrawable fuera de pantalla y se puede crear sin una jerarquía de componentes visible.
Este artículo fue útil para que funcione. Dejaré de aceptar esta respuesta hasta que haya confirmado que es completamente funcional.
También debería decir que la respuesta provino de este foro , no de mi propio cerebro.