言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Jun をちょっとだけ試す

阿部さんに指摘されて、Jun http://www.sra.co.jp/people/aoki/Jun/Main.htm を試してみる。というか OpenGL をやると判った時点でもっと早くやっておけば良かったんだけど、まあ、多分そのときに読んでも意味がサッパリ分からなかったかも知れないが。

ほんの一時間触っただけだけで、Croquet の違いは直ぐに分かる。Jun の方がより抽象化されている。Croquet の場合は、直方体なら直方体のクラス自体に OpenGL のコマンドを書き込むようになっている。だから、新しい立体を定義したい場合、ユーザは OpenGL の性質を良く知っておかなくてはならない。これは大して難しい事ではないのだが(なにせ座標を書くだけなので)。しかしOpenGL のステートマシンという性質がモロ見えだと、ユーザは自分の後始末をきちんと付ける必要がある。例えば裏面を描画した後で、ちゃんと元に戻しておかないと世界全体が裏返ってしまう。

Jun の場合、OpenGL はより裏方に徹している。立体オブジェクト JunOpenGL3dObject はrenderOn: を通して描画されるが、そのときに渡される描画コンテキストは生の OpenGL では無く、JunOpenGLRenderingContext だ、それが OpenGLInterface (JunWglInterface のインスタンス) 経由で OpenGLコマンドを出力する。合ってるかな。

Croquet の一つ何十行もあるメソッドを見慣れていると、Jun の富豪的なソースは、わーもったいな! と思うのだが、これでちゃんと動いているので問題は無いのだろう。逆に Jun で OpenGL のステンシルを使いたいときなんかはどうするのかな?