以下程序:
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.
发布于 2013-09-09 17:07:53
首先,我不在OS上,不能重现这个错误(也不能重现警告)。此外,我可能正在使用所有库的不同版本。请注意,操作系统之间的这种差异(不幸的)并不少见。当运行程序时,我得到了它下面像素的副本,就像教程作者所期望的那样。
错误消息状态
redisplay needed for window 1, but no display callback
因此,我猜测您需要注册displayCallback
。因此,为了与本教程的下一部分保持一致,我添加了
displayCallback $= clear [ ColorBuffer ]
在主循环之前。然而,它并没有修复像素携带行为。为了解决这个问题,我将其更改为
displayCallback $= (clear [ColorBuffer] >> swapBuffers)
这也会更新屏幕上的缓冲区。
附注:请注意,该教程来自2006年,它可能有一点腐烂。此外,当时OpenGL的最新版本是OpenGL 2.1。
https://stackoverflow.com/questions/18678944
复制相似问题