描画パスについてまだ考えております。
いつまでも悩むより手を動かしちまった方が早いだろうと書いてみたんだけど、あっさりとこれでべつにいいじゃん的なものが書けてしまった。
Root Pass RenderTarget Camera Lights Light Light ... Primitives Primitive Effect Primitive ... Pass ...
これだけのシーングラフを作る。とりあえずこれだけあれば足りるだろ的な。
これをパス毎に辿ってソートしてみたり、クリッピングしてみたり、描画してみたりします。
このシーングラフ(?)、階層構造が無くて直接扱うには使いづらいので、実際にゲームからはもっと上のレベルのシーングラフを使うことになる。だからPrimitiveには既にWorld座標系が計算されたものが入ります。
階層構造つけなかったけど、クリッピング用にPrimitiveは階層持てるようにしてもいいかもしんないね。
あんまり描画の効率とか考えてないんだけどまあいいかな。今はGPUよりCPUがいっぱいなので描画効率はまたあとで考える。
拡張性もあんまり考えてなかったりする。以前はどういうパスがいいのかわからないのでどうにでもできるように拡張性がどうこうと心配して変に複雑にしてたけど、今はちょっと分かってきた。多分このシンプルな形から大きく離れることはしばらくないだろう。
ともあれこれで基本設計は出来た。あとはもう作って使ってみてやばい所とか足りないところを見つけていくしかないな。
Snow Leopardでちゃんとビルドできるようになっているようなので安心だ。1.2系なんできっとRuby/SDLも安心だ。
あとなにげにWindows版でウインドウのリサイズをするとOpenGLのコンテキストを作り直してしまうというのが無くなっている模様。これは嬉しい。
今迄、SDLのウインドウを作ってリサイズ可能にしておくと、リサイズ時にOpenGLのコンテキストを一回破壊して作り直すという仕様だった。なんでそんなことをしてたのかよくわからないんだが、コンテキストを破壊されるとコンテキストの状態はもちろん、テクスチャから何から全オブジェクトが解放されてしまうわけで、リソースの構築やらなにやらを全部やりなおさないといけなかった。たかがリサイズですぜ…。
つまりウインドウのリサイズ&OpenGLの組み合わせは実質使い物にならなかった。のが、今回の変更で使えるようになったらしい。やったー。
これでSDL使いながらもウインドウ表示は仕方なくGLFWとかよくわからんことをしなくてもすむね!