El OpenGL Utility Toolkit ( GLUT ) es una biblioteca de utilidades para programas OpenGL , que principalmente realizan operaciones de E/S a nivel de sistema con el sistema operativo anfitrión . Las funciones que se realizan incluyen la definición de ventanas, el control de ventanas y la supervisión de la entrada del teclado y el ratón . También se proporcionan rutinas para dibujar una serie de primitivas geométricas (tanto en modo sólido como en modo de estructura alámbrica), incluidos cubos , esferas y la tetera de Utah . GLUT también tiene un soporte limitado para crear menús emergentes.
GLUT fue escrito por Mark J. Kilgard , autor de Programación OpenGL para el sistema X Window y The Cg Tutorial: La guía definitiva para gráficos programables en tiempo real , mientras trabajaba para Silicon Graphics Inc.
Los dos objetivos de GLUT son permitir la creación de código bastante portable entre sistemas operativos (GLUT es multiplataforma ) y facilitar el aprendizaje de OpenGL. Comenzar a programar con OpenGL mientras se utiliza GLUT a menudo requiere solo unas pocas líneas de código y no requiere conocimientos de las API de ventanas específicas del sistema operativo .
Todas las funciones GLUT comienzan con el glut
prefijo (por ejemplo, glutPostRedisplay
marca la ventana actual como que necesita ser redibujada).
La biblioteca GLUT original de Mark Kilgard es compatible con X Window System ( GLX ) y Nate Robins la adaptó a Microsoft Windows ( WGL ). Además, macOS viene con un marco GLUT que es compatible con su propio NSGL/ CGL .
La biblioteca GLUT de Kilgard ya no se mantiene y su licencia no permitía la redistribución de versiones modificadas de la biblioteca. Esto estimuló la necesidad de software libre o reimplementaciones de código abierto de la API desde cero. La primera de estas bibliotecas fue FreeGLUT , que pretende ser una reproducción razonablemente cercana, aunque introduce una pequeña cantidad de funciones nuevas para lidiar con las limitaciones de GLUT. OpenGLUT, una bifurcación de FreeGLUT, agrega una cantidad de características nuevas a la API original, pero el trabajo en ella cesó en mayo de 2005.
Mark Kilgard tiene un repositorio en GitHub para GLUT. [1] El archivo de encabezado glut.h contiene la siguiente licencia: [2]
/* Derechos de autor (c) Mark J. Kilgard, 1994, 1995, 1996, 1998, 2000, 2006, 2010. *//* Este programa se puede distribuir libremente sin pago de licencias y es proporcionado sin garantía expresa o implícita. Este El programa no es de dominio público. */
Algunas de las decisiones de diseño originales de GLUT dificultaban a los programadores realizar las tareas deseadas. Esto llevó a muchos a crear parches y extensiones no canónicos para GLUT.[1] Algunas reimplementaciones de software libre o de código abierto también incluyen correcciones.
Algunas de las limitaciones más notables de la biblioteca GLUT original incluyen:
glutMainLoop()
, una función que nunca retorna. Esto dificulta que los programadores integren GLUT en un programa o biblioteca que desee tener el control de su propio bucle de eventos. Un parche común para solucionar esto es introducir una nueva función, llamada glutCheckLoop()
(macOS) o glutMainLoopEvent()
(FreeGLUT/OpenGLUT), que ejecuta solo una única iteración del bucle de eventos de GLUT. Otra solución alternativa común es ejecutar el bucle de eventos de GLUT en un hilo separado , aunque esto puede variar según el sistema operativo y también puede presentar problemas de sincronización u otros problemas: por ejemplo, la implementación de GLUT en macOS requiere que glutMainLoop()
se ejecute en el hilo principal.glutMainLoop()
nunca se retorne también significa que un programa GLUT no puede salir del bucle de eventos. FreeGLUT soluciona este problema introduciendo una nueva función, glutLeaveMainLoop()
.glutWMCloseFunc()
.Dado que ya no se mantiene (básicamente fue reemplazado por el FreeGLUT de código abierto ), los problemas de diseño mencionados anteriormente aún no se han resuelto en el GLUT original.