- FBO(FramebufferObject)をレンダリングごとに用意
- FBOを1つ作っておいて、その中に書き込み先となるテクスチャを再セット
- pbufferを使う
最後のやつは、かなりレガシーな古いコードとなりそうなので、
最近の環境であればFBOを使うことにしておいた方がいいと思う。
それでも上記のような2ケースがあるので、どちらがいいか検討してみたいと思う。
ちなみにFBOはiPhone環境でも使えるようで、
OpenGL ES 2.0世代な環境ならば標準的に使えるのかもしれない。
それならますますFBOで良さそうってもんです。
Next-Generation Rendering with OpenGL
“http://origin-developer.nvidia.com/object/gdc_2005_presentations.html”
上記のURLからGDC2005での発表資料をゲットできる。
今となっては6年前の資料だからどこまで信用して良いかわからない。
(6年も立てばGPUのアーキテクチャやドライバも相当進化するし)。
■実験
100枚のレンダー先となるテクスチャを用意し、
それぞれにFBOを用意するタイプ(TYPE1)と、FBOは1つでバインドするテクスチャを交換していくタイプ(TYPE2)の2ケースで速度を計測してみました。
環境は、Windows7 SP1で、AMD RADEON 6850 を使用しています。
コンパイラはVisualStudio 2010 Pro です。
計測はリリースビルドで行っています。
種別 | 速度 |
---|---|
TYPE1 | 4~5 ms |
TYPE2 | 5~6 ms |
微妙な差ですが、それぞれFBOを用意してあげる方がより高速な結果となりました。
AMD製なので資料の主張と異なる結果が出てくるかと思っていましたが、同じ結論を得ることが出来て一安心です。
■まとめ
テクスチャレンダリングの際にはテクスチャごとに専用FBOを用意してあげるほうがよい。