Haskell或Ocaml与OpenGL和SDL的Windows预编译分发版本

10

我想学习Ocaml或Haskell,并通过编写简单的游戏来实现。显然,有一个小问题:没有人关心Windows,而我想在Windows上本地实现。

Haskell有Cabal,其中有SDL,但由于传递给gcc的参数顺序的微不足道的问题,它无法构建,没有解决方法。 Ocaml甚至没有这个,所有内容都在源代码包中,无论是GLCaml还是OcamlSDL等。

是否有地方可以获取在Windows上使用Haskell或Ocaml工作的SDL而不必与十几个版本的编译器斗争?


1
Godi和OASIS是OCaml的两个类似Cabal的系统,但我不会将它们作为答案提供,因为我不知道它们在Windows下的工作情况如何。 - Pascal Cuoq
2
这真的是一个非常棘手的问题,我一年前也遇到了同样的问题,但最终放弃了,在Ubuntu下使用OCamlSDL设计了我的游戏,如果感兴趣,这是游戏的链接http://web.martani.net/worms。 - 0xFF
从Haskell平台开始为Windows创建:http://haskell.org/platform - Don Stewart
5个回答

5

Haskell平台自带OpenGL绑定,应该可以在Windows上直接使用。

关于hackage上的SDL包,您可以使用cabal unpack SDL获取源代码并自行修复问题。要安装带有您更改的软件包,请在解压缩的目录中运行cabal install。无论如何,请给维护者留言,我相信他会提供帮助。


据我所知,问题甚至不在包中;这里有更详细的解释 - Baczek
1
啊,真恶心!SDL库用CPP宏重新定义了你的main函数。实际的main函数在DLL中!这可能是链接器参数必须交换的原因。简而言之,责任在于libSDL,其设计与任何外部接口都不兼容。 - Heinrich Apfelmus
我猜你唯一的选择是暂时安装一个带有JP Moresau修复的自定义版本的hsc2hs。或者你可以非常狡猾地用一个包装程序替换GCC,在将参数传递给真正的GCC之前交换它们。 - Heinrich Apfelmus
即使您已经安装了hsSDL,乐趣仍将继续,因为SDL期望在使用它的应用程序上执行其CPP宏魔法,如果入口点是Haskell的main,则这种方法效果不佳。最简单的解决方案似乎是通过FFI导出您的真实main,并从一个小的C包装器中调用它,以便SDL可以随意操纵它。 - C. A. McCann

1

看起来它只支持古老版本的OpenGL - 我没有看到顶点/片段程序等。 - Baczek
@Baczek:正如我在答案中所说,GLCaml绑定确实支持顶点和片段着色器,我也使用过它们。然而,如果你打算分发你的作品,我建议不要使用OCaml或Haskell。 - J D

1

这不是SDL,但GLFW通过Cabal在Windows上与Haskell配合工作。


1
我发现在Windows上使用最新的Haskell平台让SDL正常工作的最佳指南可以在this blog中找到。我按照每个步骤进行操作,尽管出现了一些配置错误信息,但它完美地运行了。

0

我的文章使用OpenGL 2进行高保真图形(2008年2月25日)解释了如何使用GLCaml绑定在OCaml中编写基于OpenGL的应用程序,该应用程序使用顶点和片段着色器(以Phong着色器为例)。在OCaml Journal上有9篇文章介绍OpenGL,尽管大多数使用旧版LablGL库进行OpenGL 1.1。

我曾经尝试在Linux下使用Haskell运行OpenGL,但是在2007年失败了。Haskell平台可能已经改变了这一点,但我既没有时间自己尝试,也从未听说过有人用它来做这件事。

然而,OCaml和Haskell都必须依赖于脆弱的低级绑定到OpenGL,因为它们是独立的语言,没有人成功地使用它们来开发任何重要的商业软件。由于你在Windows上,F#+XNA是一个更合理的选择,因为XNA经过了尝试和测试,而F#具有安全的高级接口。通过Google搜索可以让你了解到你将成为多么先锋:+haskell +opengl在Google上有437个结果,而+ocaml +opengl只有347个结果。


1
很不幸,最实际的答案,特别是最后一段,被投了反对票。 - Mozan Sykol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接