着々と実装を進めて新しいコンテキストオブジェクトを使った描画ができるようになった。
#コンテキストの初期化をするよ(ウィンドウは既にある前提) @context = Riko::Context.new Riko::Context.current = @context #描画するもの準備するよ prim = Riko::SimplePrimitive.new(:triangles) prim.color(1.0, 0.0, 0.0, 1.0) prim.vertex(0.0, 0.3) prim.color(0.0, 1.0, 0.0, 1.0) prim.vertex(-0.3, -0.3) prim.color(0.0, 0.0, 1.0, 1.0) prim.vertex(0.3, -0.3) #画面フレームバッファを設定するよ @context.framebuffer = Riko::DefaultFramebuffer.new(@width, @height) #画面クリアするよ @context.framebuffer.clear #単に描くだけのシェーダを設定するよ @context.shader = Riko::FixedShader.new #primを描画するよ @context.primitive_render(prim.primitive) SDL.GLSwapBuffers #コンテキストとこのコンテキストで作ったリソース #(フレームバッファ、シェーダ、バッファオブジェクト、プリミティブ) #を破棄するよ。 @context.dispose
とまあ、とてもシンプルに描画できて満足である。
あとはRenderStateも設定できるようにしないといけないのでそれを作りたいが、ちょっと大変なので今のコードを使いまわせるようにちょっと手を入れよう。
あとシェーダがちゃんと動くか怪しいっつーか動かないだろうからそれをやったりしないと。こっちもちょっと名前が変わったりアセンブリシェーダのクラス構成が変わったりする予定。
少しずつでも動くになるとやる気が出るね。
変なタイトルつけたけど前の続きです。
以前、RubiniusはMRIの拡張ライブラリ使える*1っつーけどGCとか大丈夫なのかいと書きましたが、あれから調べました。
結論から言うとGCは大丈夫。気にしなくてよさげです。
Rubiniusは中身がC++なんでCのMRIとはオブジェクトの作りが全く異なっている。それをCの拡張ライブラリに渡すわけにもいかないので一段Handleオブジェクトってのを作ってラップしてる。
そのHandleオブジェクトはVMのHandleオブジェクト領域に保持しておいてGCはHandleオブジェクト領域も走査してくれる。
とかいうことでGCは大丈夫っていうことだ。
そういやMacRuby 0.5が出てた。まだ入れるだけしかやってないけど拡張ライブラリがどうなってるか調べたほうがいいかなぁ。
*1 ビルドは必要ですが