2

次のプログラム:

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

次のコマンドでコンパイル:

ghc -package GLUT HelloWorld.hs -o HelloWorld

このチュートリアルで説明されているように、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.
4

1 に答える 1

3

まず第一に、私は OS X を使用していないため、エラーを再現できませんでした (それに関する警告もありません)。さらに、おそらくすべてのライブラリの異なるバージョンを使用しています。オペレーティング システム間のこの種の違いは (残念ながら) 珍しいことではないことに注意してください。プログラムを実行すると、チュートリアルのライターが期待しているように、その下にあるピクセルのコピーが得られました。

エラーメッセージの状態

redisplay needed for window 1, but no display callback

したがって、私の推測では、を登録する必要がありますdisplayCallback。したがって、チュートリアルの次の部分に沿って、追加しました

displayCallback $= clear [ ColorBuffer ]

メインループの前。それでも、ピクセル搬送動作は修正されませんでした。それを修正するために、私はそれをに変更しました

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

画面上のバッファも更新します。

PS チュートリアルは 2006 年のものであることに注意してください。少し腐っている可能性があります。さらに、OpenGL 2.1 は当時の OpenGL の最新バージョンでした。

于 2013-09-09T09:07:52.980 に答える