Haskell中的OpenGL + GLUT Hello World不适用于OSX Lion

时间:2013-09-07 23:33:54

标签: macos opengl haskell glut

以下计划:

import Graphics.Rendering.OpenGL
import Graphics.UI.GLUT
main = do 
  (progname, _) <- getArgsAndInitialize
  createWindow "Hello World"
  mainLoop

使用命令编译:

ghc -package GLUT HelloWorld.hs -o HelloWorld

this教程中所解释的那样无法在OSX Lion上执行,显示以下错误消息:

2013-09-07 20:31:20.372 aff[8561:60b] GLUT Warning: The following is a new check for GLUT 3.0; update your code.
2013-09-07 20:31:20.373 aff[8561:60b] GLUT Fatal Error: redisplay needed for window 1, but no display callback.

1 个答案:

答案 0 :(得分:3)

首先,我不是在OS X上,无法重现错误(也没有重复警告)。此外,我可能正在使用所有库的不同版本。请注意,操作系统之间的这些差异(不幸的是)并不罕见。在运行程序时,我得到了它下面像素的副本,就像教程编写者所期望的那样。

错误消息说明

redisplay needed for window 1, but no display callback

因此我的猜测是你需要注册displayCallback。因此,根据本教程的下一部分,我添加了

displayCallback $= clear [ ColorBuffer ]

在mainloop之前。但它没有修复像素携带行为。为了解决这个问题,我将其更改为

displayCallback $= (clear [ColorBuffer] >> swapBuffers)

这也会更新屏幕上的缓冲区。

P.S。请注意,该教程是从2006年开始的,它可能有点烂了。此外,OpenGL 2.1当时是最新版本的OpenGL。