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

标签 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.

最佳答案

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

错误消息指出

redisplay needed for window 1, but no display callback

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

displayCallback $= clear [ ColorBuffer ]

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

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

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

附注请注意,该教程是 2006 年的,可能有点烂。而且OpenGL 2.1是当时OpenGL的最新版本。

关于macos - Haskell 中 OpenGL+GLUT 的 Hello World 不适用于 OSX Lion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18678944/

相关文章:

java - 如何使用 ByteBuffer 生成多个 VBO

c - 如何选择合适的 Haskell C 类型?

macos - 根据变量 swift 调整窗口大小

macos - 从 Mac OS X 粘贴板(剪贴板)中获取 RTF 数据

xml - 如何在 Excel 2011 for Mac 中解析 XML?

haskell `stack` 用于卸载/清理的命令?

haskell - Haskell 中 Zap Functor 和 zap 函数的目的是什么?

node.js - 如何在 Mac OS 上更新 Laravel homestead 中的 Node js?

c++ - 矩阵类 Directx 和 OpenGL

c++ - 您如何测量 OpenGL 中的峰值内存带宽?