2011-12-08 17 views
11

Non voglio usare GLUT, perché non ha una sensazione simile a Haskell. Fondamentalmente ti costringe a usare IORef e così via a causa dei callback.Alternative GLUT per Haskell?

Ho considerato GLFW, che sembra semplice e mi permette di fare il ciclo di gioco in una monade. Ma sembra che abbia problemi con hardware diversi, ad esempio, funziona bene sul mio laptop ma non sul mio desktop. E su Windows, le trame scompaiono.

Quindi ho pensato di passare attraverso SDL, ma potrebbe esserci un problema con le dipendenze di Windows, semplicemente non so quale DLL sia necessaria.

Quindi cosa rimane per ottenere una finestra OpenGL aperta?

+2

Hai visto la discussione di GLUT da parte di Sigfpe in modo gradevole da poche settimane fa http://blog.sigfpe.com/2011/10/quick-and-dirty-reinversion-of-control.html? Non ci sono IORef ma forse non è il tipo di 'Haskell-like' che stai cercando. – applicative

+0

SDL non ha problemi per me – Qchmqs

risposta

14

GLUT, la sua scarsa reputazione intatta e giustificata, è la migliore che ho trovato.

Tuttavia, il sentimento non raffinato non è un buon motivo per non usarlo. Sei a un livello inferiore alle astrazioni che vorresti utilizzare per un progetto qui. Allo stesso modo, non dovresti usare OpenGL perché è profondamente intrecciato con idee imperative.

Ma GLUT e OpenGL sono multa. La chiave è avvolgerli in astrazioni più belle prima di usarli. Ho pubblicato per hackerare il mio wrapper per la grafica 2D in OpenGL, graphics-drawingcombinators. Ci sono altri tentativi in ​​giro, credo, e sono stato fuori dal gioco di grafica per un po ', quindi non sono più esperto nello stato dell'arte.

Avvolgere GLUT è un po 'più difficile. IORef s non sono meno funzionali di IO e, per esprimere l'interattività mentre si rimuovono IO (e altri costrutti imperativi) è necessario un qualche tipo di FRP. Alla fine queste librerie FRP finiranno per avvolgere idee imperative al di sotto di esse - quando hai a che fare con librerie scritte per C non ti sfuggirai. Ed è abbastanza irrilevante ciò che vive al di sotto comunque - tutto il software ha sotto tensione sistemi elettrici di tensione.

In ogni caso, un paio di anni fa, quando stavo effettuando delle ricerche, GLUT era l'unica libreria che realmente funzionava su più piattaforme. Preferisco l'interfaccia di ... tutti gli gli altri, ma ognuno funziona solo in determinate condizioni controllate. Questo è stato un limite importante, se non lo condividi potresti provare qualcos'altro. Ma l'interfaccia per finestre è un sottile strato che è facilmente avvolto, non è necessario basare alcuna decisione importante su questa scelta.

1

Sarebbe meglio se tu dicessi cosa non funziona esattamente su desktop/laptop. Il codice sorgente C per GLFW è disponibile con il binding Haskell. Praticamente utilizza solo alcune API di base specifiche per la piattaforma e il gioco è fatto.