El OpenGL Utility Toolkit ( GLUT ) es una biblioteca obsoleta de utilidades para programas OpenGL , que principalmente realiza operaciones de entrada/salida a nivel de sistema con el sistema operativo anfitrión . Entre sus funciones se incluyen la definición y el control de ventanas, así como la monitorización de la entrada de teclado y ratón . También proporciona rutinas para dibujar diversas primitivas geométricas (tanto en modo sólido como alámbrico), como cubos , esferas y la tetera de Utah . GLUT también ofrece soporte limitado para la creación de 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 bastante portable entre sistemas operativos (GLUT es multiplataforma ) y facilitar el aprendizaje de OpenGL. Empezar a programar con OpenGL usando GLUT suele requerir solo unas pocas líneas de código y no exige conocimientos de las API de ventanas específicas del sistema operativo .
Todas las funciones de GLUT comienzan con el glutprefijo (por ejemplo, glutPostRedisplayindica que la ventana actual necesita ser redibujada).
Implementaciones
La biblioteca GLUT original de Mark Kilgard es compatible con el sistema X Window ( GLX ) y fue adaptada a Microsoft Windows ( WGL ) por Nate Robins . Además, macOS incluye un marco GLUT que admite su propio NSGL/ CGL .
La biblioteca GLUT de Kilgard ya no recibe mantenimiento, y su licencia no permitía la redistribución de versiones modificadas. Esto impulsó la necesidad de reimplementaciones de la API desde cero mediante software libre o de código abierto . La primera de estas bibliotecas fue FreeGLUT , que busca ser una reproducción bastante fiel, aunque introduce algunas funciones nuevas para solucionar las limitaciones de GLUT. OpenGLUT, una bifurcación de FreeGLUT, añade varias características nuevas a la API original, pero su desarrollo cesó en mayo de 2005.
Mark Kilgard tiene un repositorio de GitHub para GLUT. [ 1 ] El archivo de cabecera glut.h contiene la siguiente licencia: [ 2 ]
/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998, 2000, 2006, 2010. */ /* Este programa se puede distribuir libremente sin pagar tarifas de licencia y es proporcionado sin garantía expresa o implícita. El programa no es de dominio público. */
Limitaciones
Algunas de las decisiones de diseño originales de GLUT dificultaron a los programadores la realización de las tareas deseadas. Esto llevó a muchos a crear parches y extensiones no oficiales para GLUT.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:
- La biblioteca requiere que los programadores llamen a
glutMainLoop()una función que nunca devuelve ningún valor. Esto dificulta la integración de GLUT en un programa o biblioteca que desee controlar su propio bucle de eventos. Una solución común para esto es introducir una nueva función, llamadaglutCheckLoop()(macOS) oglutMainLoopEvent()(FreeGLUT/OpenGLUT), que ejecuta solo una única iteración del bucle de eventos de GLUT. Otra solución 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 introducir problemas de sincronización u otros problemas: por ejemplo, la implementación de GLUT para macOS requiere queglutMainLoop()se ejecute en el hilo principal. - El hecho de que
glutMainLoop()nunca devuelva también significa que un programa GLUT no puede salir del bucle de eventos. FreeGLUT soluciona esto introduciendo una nueva función,glutLeaveMainLoop(). - La biblioteca finaliza el proceso cuando se cierra la ventana; para algunas aplicaciones esto puede no ser deseable. Por lo tanto, muchas implementaciones incluyen una función de devolución de llamada adicional, como
glutWMCloseFunc().
Dado que ya no recibe mantenimiento (ha sido reemplazado esencialmente por la biblioteca de código abierto FreeGLUT ), los problemas de diseño mencionados anteriormente aún no se han resuelto en la GLUT original.
Véase también
- EGL es una interfaz entre OpenGL ES u OpenVG y un sistema de ventanas .
- FreeGLUT pretende ser un reemplazo completo para GLUT, y solo presenta algunas diferencias.
- GLFW
- Capa DirectMedia Simple (SDL)
- Biblioteca de interfaz de usuario de OpenGL (GLUI)
- Biblioteca de utilidades de OpenGL (GLU)
Referencias
Enlaces externos
- GLUT - El kit de herramientas de utilidades de OpenGL. Archivado el 18 de enero de 2018 en Wayback Machine.
- La API de la interfaz de programación del kit de herramientas de utilidades OpenGL (GLUT), versión 3, se archivó el 30 de abril de 2016 en Wayback Machine (documentación oficial).
- Descargas del kit de herramientas de utilidades OpenGL (GLUT) (código fuente y bibliotecas precompiladas)
- OpenGL