Macos Hello World for OpenGL+;Haskell中的过剩不适用于OSX Lion

Macos Hello World for OpenGL+;Haskell中的过剩不适用于OSX Lion,macos,opengl,haskell,glut,Macos,Opengl,Haskell,Glut,以下节目: import Graphics.Rendering.OpenGL import Graphics.UI.GLUT main = do (progname, _) <- getArgsAndInitialize createWindow "Hello World" mainLoop 如教程中所述,无法在OSX Lion上执行,显示以下错误消息: 2013-09-07 20:31:20.372 aff[8561:60b] GLUT Warning: The foll

以下节目:

import Graphics.Rendering.OpenGL
import Graphics.UI.GLUT
main = do 
  (progname, _) <- getArgsAndInitialize
  createWindow "Hello World"
  mainLoop
如教程中所述,无法在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.

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

错误消息声明

redisplay needed for window 1, but no display callback
因此,我猜想您需要注册
displayCallback
。因此,为了与本教程的下一部分保持一致,我添加了

displayCallback $= clear [ ColorBuffer ]
在主循环之前。然而,它并没有修复像素携带行为。为了解决这个问题,我把它改成了

displayCallback $= (clear [ColorBuffer] >> swapBuffers)
这也会更新屏幕上的缓冲区


请注意,该教程是2006年的,它可能已经有点腐烂了。此外,OpenGL 2.1当时是OpenGL的最新版本。

我遇到了同样的问题,但displayCallback似乎无法解决它。
displayCallback $= (clear [ColorBuffer] >> swapBuffers)