miércoles, 25 de julio de 2007

GLUT y su eventual sustitución

Estas últimas semanas estaba tratando de recordar un poco como usar OpenGL y, a diferencia de lo que había hecho en ocasiones anteriores, probé utilizar algunas bibliotecas para facilitar el trabajo (algo se aprende al pasar los años :-)

Empecé utilizando GLUT, ya que tiene una enorme base de ejemplos desde los que partir. Pronto me encontré con un inconveniente: yo programo normalmente esta clase de aplicaciones en C++, pero GLUT fue diseñada para utilizarse con C y, por desgracia, algunas de sus callbacks tienen el prototipo void callBack(void). Esto me hacía imposible esconder a this y me obligaba a utilizar un punto de acceso central, probablemente un singleton (ahora que lo pienso mejor, podría haber implementado alguna clase de dispatcher pero, como verán, no era realmente necesario).

Al no encontrar dicha "solución" muy satisfactoria (años de propaganda anti-singleton rindiendo frutos), probé con varias adaptaciones o extensiones de GLUT para C++, siendo GLT la que atrajo más mi atención. Sin embargo, carecía notablemente de documentación e involucraba múltiples DLLs.

Me disponía a seguir probando con GLUT pero, al consultar algunos ejemplos de "procedural textures" de Sean O'Neil (lamentablemente su sitio ya no funciona, pero pude encontrar sus ejemplos en The Wayback Machine), me encontré con SDL. Ya había escuchado mencionarla, pero nunca pensé que fuera tan simple de utilizar; en unos minutos tenía corriendo mi primer ejemplo y, a partir de entonces, me convertí totalmente a SDL :-)

Sigue siendo C, pero su sistema de manejo de eventos, paradójicamente basado en un loop explícito al estilo Windows, es fácil de integrar con C++. Además gana en todas las otras áreas, ya que incorpora un control más directo de la resolución de la pantalla y la documentación, si bien breve, es la necesaria para empezar a utilizarla rápidamente.

Cuando siga con mi ejemplo de OpenGL, veré que tan satisfactoria resulta en general...

En otras áreas:
  • Tres blogs interesantes:

No hay comentarios: