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