我不想使用 GLUT,因为它没有类似 Haskell 的感觉。由于回调,它基本上迫使您使用IORef
等。
我考虑过GLFW
,这看起来很简单,让我可以在单子中进行游戏循环。但它似乎与不同的硬件有问题,例如,它在我的笔记本电脑上运行良好,但在我的台式机上却不行。在窗户上,纹理消失了。
所以我想过通过SDL进去,但是windows依赖可能有问题,我只是不知道需要哪个DLL。
那么打开 OpenGL 窗口还剩下什么?
GLUT,其糟糕的声誉完好无损,是我发现的最好的。
然而,朴实无华的感觉并不是不使用它的好理由。您的级别低于您希望在此处用于项目的抽象。同样,您不应该使用 OpenGL,因为它与命令式思想深深纠缠在一起。
但是 GLUT 和 OpenGL 都很好。关键是在使用它们之前将它们包装成更好的抽象。我已经发布了 hackage 我的 OpenGL 中 2D 图形的包装器graphics-drawingcombinators。我相信还有其他尝试,而且我已经离开图形游戏一段时间了,所以我不再精通最先进的技术。
结束 GLUT 有点困难。IORef
s 的功能不亚于IO
它本身,并且要在避免IO
(和其他命令式构造)的同时表达交互性,您将需要某种形式的FRP。最后,这些 FRP 库将最终将命令式想法包装在它们之下——当您处理为 C 编写的库时,您将无法逃避这一点。无论如何,下面的内容并不重要——所有软件都有电压的电气系统。
无论如何,几年前当我研究时,GLUT 是唯一真正跨平台工作的库。我更喜欢......所有其他人的界面,但每个人都只能在某些受控条件下工作。这是一个主要的限制,如果你不分享它,你可能会尝试别的东西。但是窗口界面是一个很容易包装的薄层,您不需要基于此选择做出任何重大决定。
如果您说什么在台式机/笔记本电脑上完全不起作用,那就更好了。GLFW 的 C 源代码可用于 Haskell 绑定。它几乎只使用一些基本的特定于平台的 API,仅此而已。