Kit de herramientas de utilidad OpenGL
El OpenGL Utility Toolkit (GLUT) es una biblioteca de utilidades para programas OpenGL, que principalmente realizan E/S a nivel de sistema con el sistema operativo host. Las funciones realizadas incluyen definición de ventana, control de ventana y monitoreo de entrada de teclado y mouse. También se proporcionan rutinas para dibujar una serie de primitivas geométricas (tanto en modo sólido como alámbrico), 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 OpenGL Programming for the X Window System y The Cg Tutorial: The Definitive Guide to Programmable Real-Time Graphics, mientras trabajaba para Silicon Graphics Inc.
Los dos objetivos de GLUT son permitir la creación de código portátil entre sistemas operativos (GLUT es multiplataforma) y facilitar el aprendizaje de OpenGL. Comenzar con la programación de OpenGL mientras usa GLUT a menudo requiere solo unas pocas líneas de código y no requiere conocimiento de las API de ventanas específicas del sistema operativo.
Todas las funciones de GLUT comienzan con el prefijo glut
(por ejemplo, glutPostRedisplay
marca la ventana actual como que necesita ser redibujada).
Implementaciones
La biblioteca GLUT original de Mark Kilgard es compatible con el sistema X Window (GLX) y Nate Robins la transfirió a Microsoft Windows (WGL). Además, macOS se envía con un marco GLUT que admite 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 biblioteca de este tipo fue FreeGLUT, que pretende ser una reproducción razonablemente fiel, aunque introduce una pequeña cantidad de funciones nuevas para hacer frente a las limitaciones de GLUT. OpenGLUT, una bifurcación de FreeGLUT, agrega una serie de características nuevas a la API original, pero el trabajo cesó en mayo de 2005.
Mark Kilgard tiene un repositorio de GitHub para GLUT. El archivo de cabecera glut.h contiene la siguiente licencia:
* Derechos de autor c) Mark J. Kilgard, 1994, 1995, 1996, 1998, 2000, 2006, 2010. */ /* Este programa se distribuye libremente sin honorarios de licencia y es proporcionado sin garantía o garantía expresada o implícita. Esto programa es -no- en el dominio público. */
Limitaciones
Algunas de las decisiones de diseño originales de GLUT dificultaron que los programadores realizaran las tareas deseadas. Esto llevó a muchos a crear parches y extensiones no canónicos para GLUT.[1] Algunas reimplementaciones de software gratuito o de código abierto también incluyen correcciones.
Algunas de las limitaciones más notables de la biblioteca GLUT original incluyen:
- La biblioteca requiere que los programadores llamen
glutMainLoop()
, una función que nunca regresa. Esto hace difícil para los programadores integrar GLUT en un programa o biblioteca que desea tener control de su propio bucle de eventos. Un parche común para arreglar esto es introducir una nueva función, llamadaglutCheckLoop()
(macOS) oglutMainLoopEvent()
(FreeGLUT/OpenGLUT), que funciona sólo una sola iteración del bucle de eventos GLUT. Otra solución común es ejecutar el bucle de eventos de GLUT en un hilo separado, aunque esto puede variar por sistema operativo, y también puede introducir problemas de sincronización u otros problemas: por ejemplo, la implementación de macOS GLUT requiere queglutMainLoop()
correr en el hilo principal. - El hecho de que
glutMainLoop()
nunca regresa también significa que un programa GLUT no puede salir del bucle del evento. FreeGLUT lo arregla presentando una nueva función,glutLeaveMainLoop()
. - La biblioteca termina el proceso cuando la ventana está cerrada; para algunas aplicaciones esto puede no ser deseado. Por lo tanto, muchas implementaciones incluyen un callback extra, como
glutWMCloseFunc()
.
Dado que ya no se mantiene (esencialmente reemplazado por FreeGLUT de código abierto), los problemas de diseño anteriores aún no se resuelven en el GLUT original.
Contenido relacionado
Tecnología MOS 65xx
Seguimiento de la fuente
Filtro de internet