うーん、洗濯物が乾かん。
uniformな変数についてはシェーダコンパイル&リンク時に取れるものを取るようにした。
locationとnameとsizeと型が取れたんだけど。sizeってなんじゃろね? って配列の時のサイズか。
変数情報取得のせいでちょこっと遅くなるかもしれんけど、誤差。あとコンパイル時一回だけなんで良し。以前は設定時にlocationを取っていたのをコンパイル時に取るようにしたから相殺だよ。
あと型を取るようにしたんで値設定時に型変換することが出来るようになった。つかこれがメイン。
vec3のuniform変数が設定できるようにしたのはもちろんmat3とかmat2にも対応。ちょっと便利。
vec4に1要素のfloatを設定したら4要素に分配して…ってのも思いついたけど、めんどいからいいや。そんなことするなや。
あと存在しないuniform変数に値設定しようとしたら例外投げ…とやろうとしたが、宣言だけしてても使ってない変数はコンパイル時に消されるのを思い出したのでやめ。警告出してもいいけど、それもうざそうだ。
ついでにuniform変数の遅延設定も実装。 設定時にブロックを指定しておくと、シェーダを使用する時にブロックが呼ばれて戻り値がuniform変数に設定されるようになる。
無いと不便だよな、と思ったけど、無ければないでなんとかなるのかなぁ。
まあ実装しちゃったし、あったら使いそうな気がするんでいいか。
あとattributeもコンパイル時に取って来るようにしようかなぁ。
これは型変換とかするわけじゃないからべつに無くてもいいんだけど、uniform変数の情報がプログラムから取れるようになったから、attributeの情報も取れるようにした方が親切ではあるね。ほんとにいるかどうかは謎。
attributeの場所もキャッシュしておく手はあるね。