Calenderも早いものでもう8日目となりました。@cpp_akiraさんのお誘いで今回の記事を書くことになりました、@jirohclこと谷関です。今回はHaskellで適当にOpenGL使って遊びましょうと言うことでGPipeの紹介をしたいと思います。GPipeの紹介ですが、このパッケージはGLSLをHaskell上でDSLとして表現したものになっています。よってGLSL等の手続き型シェーダコードを書くことなく、全てHaskellのコードで書く事ができるので、せっかく関数型つかってるのに・・・と肩を落としている人は使ってみるといいんじゃないでしょうか。GLUTで部分importをしていますが、これは何も考えないで全てimportしてしまうとGPipeとGLUTの宣言が衝突してしまうのからです。Float))この見慣れないPrimitiveStreamと言うのは、VertexBufferに送る情報です。これはTriangleの他に、"Line"、"Point"も定義されているので用法、用量を守って正しくお使い下さい。(1:.0:.0:.()))この部分で実際のデータを渡してあげます。TriangleStripはOpenGLユーザーでおなじみの次々と三角形を補完してやるアレです。他にもGPipeではTrianglesも定義されているので用途に応じて使い分ければ良いでしょう。shaderとラスタライザに渡すデータに変換しています。ここがDSLで実現されたVertexShaderの部分です。Shader部分をラスタライズしますと伝えなくてはいけません。(li:.li:.li:.())そしてこの部分で実際に表示する色を決定しています。(0.1:.0.3:.0.6:.()))newFrameBufferColorで新しくFrameBufferを作り、先ほどまでのコードをpaintColorで全てつなげば完了。簡単!と、簡単にGPipeの紹介を行ったわけですが、これを見て判るとおり、あまり手間をかけずにHaskellを使ってshaderで遊べるのが魅力だと思います。