2011-12-08 24 views
11

No quiero usar GLUT porque no tiene una sensación similar a Haskell. Básicamente obliga a utilizar IORef y tal, debido a las devoluciones de llamada.GLUT Alternativas para Haskell?

He considerado GLFW, que parece simple y me permite hacer el bucle del juego en una mónada. Pero parece tener problemas con hardware diferente, por ejemplo, funciona bien en mi computadora portátil pero no en mi escritorio. Y en las ventanas, las texturas desaparecen.

Así que he pensado en entrar a través de SDL, pero puede haber un problema con las dependencias de windows, simplemente no sé qué DLL necesita.

Entonces, ¿qué queda para abrir una ventana de OpenGL?

+2

¿Has visto la discusión de sigfpe agradablemente alucinante de GLUT desde hace unas semanas http://blog.sigfpe.com/2011/10/quick-and-dirty-reinversion-of-control.html? No hay IORefs, pero tal vez no es el tipo de 'Haskell' que estás buscando. – applicative

+0

SDL no tengo problemas para mí – Qchmqs

Respuesta

14

GLUT, su mala reputación intacta y justificada, es la mejor que he encontrado.

Sin embargo, la sensación desagradable no es una buena razón para no usarla. Estás en un nivel por debajo de las abstracciones que te gustaría usar para un proyecto aquí. De la misma manera, no debe usar OpenGL porque está profundamente enredado con ideas imperativas.

Pero GLUT y OpenGL son bien. La clave es envolverlos en abstracciones más agradables antes de usarlos. He publicado para piratear mi envoltorio para gráficos 2D en OpenGL, graphics-drawingcombinators. Hay otros intentos alrededor, creo, y he estado fuera del juego de gráficos por un tiempo, así que ya no estoy bien versado en el estado del arte.

Relleno GLUT es un poco más difícil. IORef s no son menos funcionales que IO sí mismo, y para expresar la interactividad mientras evitas IO (y otras construcciones imperativas) necesitarás alguna forma de FRP. Al final, estas bibliotecas de FRP terminarán envolviendo ideas imperativas debajo de ellas: cuando trabaje con bibliotecas escritas para C, no escapará a esto. Y no tiene importancia lo que vive debajo de todos modos: todo el software tiene sistemas eléctricos de voltaje debajo.

De todos modos, hace un par de años cuando estaba investigando, GLUT era la única biblioteca que realmente funcionaba multiplataforma. Prefiero la interfaz de ... todos los los demás, pero cada uno solo funciona en ciertas condiciones controladas. Esa fue una limitación importante, si no la compartes puedes intentar algo más. Pero la interfaz de ventana es una capa delgada que se envuelve bastante fácilmente, no necesita basar ninguna decisión importante en esta elección.

1

Sería mejor si dijera qué es exactamente lo que no funciona en el escritorio/computadora portátil. El código fuente C para GLFW está disponible con enlace Haskell. Prácticamente solo usa algunas API básicas específicas de plataforma y eso es todo.