部屋の気温が体温より高いっておかしくね?
仕切りなおしというか、作り直しというか?
それほど大きくもないが大きい変更というか?
何が気にくわなかったかと言えば、設計か。
結局OpenGLに合わせた設計になってたんだけど、どうも使いづらい。
つかOpenGLに合わせた設計とかって、結局固定機能に合わせた設計なんだよね。
でもシェーダのことを考えるといまいちつりあいが取れなくなってこまった。
で、まあ、今後固定機能とシェーダどっちがメインで組みたいのよと思ったときに、シェーダの方が楽。
まあシェーダはほぼ全部自前で書かなきゃいけないけど、固定機能の建増しを重ねた意味不明設計に合わせんのも苦痛だもんな。当然シェーダの方が柔軟だし。
あとはあれ、SIGGRAPHで発表してたOpenGLの新しいオブジェクトモデルとやらに影響受けまくりました。シェーダメインの設計ぽかったんで。
OpenGLがほんとにその新しいモデルになるのかと言われれば、ほんとかよ、とか思うんだけど、上の層でそれを見据えた、というかそれを参考にしたモデルにするのは悪くないと思ったわけよ。
で、作り直し後はこんな感じになるイメージ
require 'riko2' include Riko scr = Screen.new(:width => 640, :height => 480) shader = DefaultShader.new geom = Buffer.new scr.clear scr.render(shader, geom) scr.swap
基本的にはこんなんかなぁ。
パラメータは基本的に全部ハッシュ渡し。:width => 640とかそれがまあ。
Screenはウィンドウ。 ウィンドウといいつつDefaultFramebufferになる予定。
フレームバッファはまあ普通のOpenGLのフレームバッファ相当かなぁ。マルチサンプルがめんどいのをなんとかするかも。
DefaultShaderは固定機能。Shaderはシェーダ自体、各変換行列、テクスチャ、uniformなパラメータ、マテリアルのパラメータ、ライト、あとブレンディングなんかを持つ。つか普通シェーダに入ってくるvarying以外のパラメータ全部+出力オプションちょっと。
BufferはVertexBufferとかPixelBufferとかを想定。でもちょっとプリミティブすぎるんで、なんかvaryingなパラメータをまとめるようにしないとだめかな。
ん、でも一つのBufferオブジェクト+オフセット指定だけでもいいかな。
ねる