Hatena::Grouphaskell

knenetのhaskell手記

2007-10-06

GLUT 12:15 はてなブックマーク - GLUT - knenetのhaskell手記

どこへ行っても最初のプログラムを複雑に書きすぎだ。

やっぱり画面を表示するだけのプログラムが必要だよね。

import Graphics.UI.GLUT

main = do
    createWindow "GLTest"

    displayCallback $= displayScene
    mainLoop

displayScene = do
    flush

HSPなら何も書かないところだけど、haskellじゃそれは無理。

それでも、ほとんど疑念を挟むところはないね。

GLUTをimportして、窓を作って、何を描くか指定してメインループへ移行。

メインループは、窓を維持するために必要だね。

HSPじゃ標準では窓はリサイズできないけど、GLUTの窓はできる。その入力を待つためにメインループがを使う……で合ってるかな。


displayCallbackは画面の描画が必要なときに呼び出されるコールバック関数を指定する。

とりあえず、画面を更新するだけの関数を作って放り込んだ。

flushのかわりにprint "hoge"でも入れると、flushの必要性と呼び出されるタイミングが分かる。


GLUTの良いところは、MainLoopに入ったらあとはコールバック関数だけで動かすところだね。

動作がモジュール化されているので、問題点がどこにあるかすぐに分かる。

もちろん、自分でも分かりやすくなるように注意して書かないといけないけど。

欠点は同じところにあって、スタートさせてしまえば、トップレベルでの分岐はできない。

まあ、そんなことが必要なプログラムは複雑すぎるので、簡単に書けるように心掛ければ大丈夫。

それに、Cならメモリ消費量が問題になったりするけど、haskellなら通常と対して事情が変わらないので気にしなくていい。


これだけだと何か描いたりできないから、窓の設定から考えなくちゃいけないけど、今までHSPでコードを書いてきた身としては、これを改造して作ることを考えた方が気が楽だ。