kumaryu日記
2008-11-18 乾燥しまくり
_ [OpenGL] また変な拡張が
VRAMの空き容量とる拡張なんか無いはずだよなと思って見に行ったら関係ないけど変な拡張が増えてた。
EXT_vertex_array_bgra、WGL_NV_gpu_affinity、EXT_texture_swizzle、NV_transform_feedback2、NV_explicit_multisampleとか。
EXT_vertex_array_bgraはglColorPointerとかで頂点カラー指定するときにrgba順だったのをbgra順にできるんだと。Direct3Dがこうなってるからとかなんとか。そうなのか。
WGL_NV_gpu_affinityは複数GPUがあるシステムで特定のGPUに結びつけられたコンテキストを作るのに使う。普通使わんだろうなこんなの。
EXT_texture_swizzleは前も書いたけど、rにアクセスしてると思ったらgだった的なことを実現。何に使うのかと思ったけどGL3だとlaテクスチャが無くなってrgテクスチャになったりするからそういうのをごまかすのに使うのかも知れん。
NV_transform_feedback2はTransformFeedbackオブジェクトってのが作れるようになってて、設定切替えが便利に。
あとTransformFeedbackの中断/再開もできちゃう。裏で回しといて描画する時にも終わってなかったらいったん中断して描画だけしちゃうとかいう用途なのかね。
さらに、TransformFeedbackでキャプチャしたプリミティブの数だけDrawArraysしてくれる関数も追加。
ジオメトリシェーダで増やした結果をキャプチャして何かして、そのあとそいつを描画したいときに、ジオメトリシェーダでどんだけプリミティブ増やしたのかをTransformFeedback終わるの待って調べるのが困る人向け。
いいたいことは分かるんだが、そんな用途がどれだけあるんだよ…ってマルチパスでFeedbackするときとかかな。それなら分かる。
NV_explicit_multisampleがまたなんだかすごいんだけど中途半端な。
MSAAのとき、何番目のサンプルがピクセルのどこをサンプルするかとかとれたりする。設定は無理。
あとシェーダでMSAAなレンダーバッファをそのままテクスチャとして読み込める。専用のテクスチャにレンダーバッファくっつけて、どこの何番目のサンプルを取得するかシェーダで指定してテクスチャと同じような感じで読める。
あとサンプルマスクってのも指定できるらしい。よくわからんが、カバレッジにたいするマスク?何に使うのかしら。
カスタムMSAA一歩手前てな感じでいいんだろうか、この拡張は。
正直どう使うんだかよく分からんが、頑張ればMSAA自分で結構コントロールできますよ!ってことか?うーん。
確かに自分でサンプリングパターンは指定できないものの、動的にどれをサンプルするか決められるから、自分で端折れる所は端折れるってことか。難し過ぎるお。
NV_transform_feedback2はGTX280とかで既に実装済み、NV_explicit_multisampleは180系ドライバで実装されてるらしい。
NV_transform_feedback2はちょっとよさそうだなぁ。中断再開はいらんけど、TransformFeedbackオブジェクトとかオブジェクトにまとめるのはいい感じ。あとプリミティブ数あらためてとらなくても描画できるとか。
TransformFeedbackも使える環境では使ってみたい所ではあるんだが、手を出すタイミングがなかなかね…。