que tienen esta línea de código:Java: openGL: JOGL: ¿Qué sucede detrás de las escenas cuando llamo al método display()?
renderableObject.renderObject(gl, glu);
Esto conduce a una larga lista de objetos que están siendo prestados por OpenGL, sin embargo, sólo funciona cuando se utiliza de la siguiente manera:
@Override
public void display(GLAutoDrawable drawable)
{
renderableObject.renderObject(gl, glu);
}
Si llamo a la línea fuera del método de visualización anulado recibo una excepción que dice que no hay glContext en el hilo actual, de hecho si llamo a cualquier comando gl draw fuera de este método recibo la misma excepción
ahora idealmente quiero crear una gran cantidad de listas de visualización s una vez, luego renderícelos en cada cuadro con la lista de visualización impar para recrear periódicamente. Sin embargo, tengo que pasar por este único método de visualización(), lo que significa que tendría que probar cada cuadro si la lista de visualización se ha creado, o si necesita cambios, etc. ¡60 veces por segundo! Qué desperdicio de poder de procesamiento cuando podría manejarlos por separado una vez cuando sea necesario.
Así que, sea lo que sea que llame al método display(), me gustaría poder replicarlo, permitiéndome crear una gran cantidad de mis propios métodos de visualización personalizados, ¡sin tener que recurrir a este único método para todo!
Entonces, ¿hay una simple llamada gl que puedo hacer?
detrás de escena JOGL está haciendo un montón de trabajo. Está creando un GLContext y actualizándolo para el GLCanvas para el hilo actual. ------- ¿No podría hacer esto yo mismo? – Troyseph
Sebastian Troy, tu puedes pero lo que hace no es realmente trivial. Puedes hacer las operaciones mínimas estrictas (obtener el GLContext de GLAutoDrawable y hacerlo actual), pero ten en cuenta que JOGL contiene montones de bonitos caprichos y soluciones que lo hacen mucho más seguro que el OpenGL nativo en C o con otro enlace en Java. C#, Python, ... Además, es realmente fácil arruinar tu rendimiento si haces algo malo. Cuando porté Ardor3D a JOGL 2, descubrí que makeCurrent() se llamó inútilmente una vez, eliminar esta llamada me dio un gran impulso cuando v-sync estaba desactivado. – gouessej