2007-10-06
■ GLUT 
どこへ行っても最初のプログラムを複雑に書きすぎだ。
やっぱり画面を表示するだけのプログラムが必要だよね。
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でコードを書いてきた身としては、これを改造して作ることを考えた方が気が楽だ。
コメントを書く