Framebuffer Objectで設定するレンダーバッファとレンダーテクスチャについて。どこかの記載で、レンダーバッファのほうがレンダーテクスチャよりも
高速に動く余地があるということが書いてあった。
これは以前の日記でも書いたとおり。ここでFBOにはレンダーテクスチャとレンダーバッファとそれぞれ設定するための関数が用意されているが、
同時に設定したらどんなことが起こるのかが疑問であった。
レンダーバッファとレンダーテクスチャ、両方が同時に使えるのだろうか?
高速に動く余地があるということが書いてあった。
これは以前の日記でも書いたとおり。ここでFBOにはレンダーテクスチャとレンダーバッファとそれぞれ設定するための関数が用意されているが、
同時に設定したらどんなことが起こるのかが疑問であった。
レンダーバッファとレンダーテクスチャ、両方が同時に使えるのだろうか?
■実験
今回は、以前のデプステクスチャ、デプスレンダーバッファのコードがあったのでこれを利用して試してみました。
- レンダーテクスチャを用意
- レンダーバッファを用意
- framebuffer objectを用意
- カラーに関してはレンダーテクスチャをセット
- デプスについてはこの時点ではセットせず
この後、メインループに入ったところで
何らかのボタン押下により、レンダーバッファをアタッチ、もしくは、レンダーテクスチャをアタッチさせる。
このとき、Fboの状態取得関数を用いてどのようになっているかを調査する
。
ちなみに今回、デプスのアタッチなので正常にアタッチ状態は
画面の描画が正常であることを前提にして取得できる値を確認した。
■結果
*Case 1:レンダーテクスチャをアタッチして、レンダーバッファをアタッチ
このとき、状態は以下のように遷移した。
***** FBO STATUS ***** Color Attachment 0: GL_TEXTURE, 256x256, GL_RGBA8 Depth Attachment: GL_TEXTURE, 256x256, GL_DEPTH24_STENCIL8_EXT ***** FBO STATUS ***** Color Attachment 0: GL_TEXTURE, 256x256, GL_RGBA8 Depth Attachment: GL_RENDERBUFFER_EXT, 256x256, GL_DEPTH_COMPONENT24
*Case 2:レンダーバッファをアタッチして、レンダーテクスチャをアタッチ
このときは以下のように遷移した。
***** FBO STATUS ***** Max Number of Color Buffer Attachment Points: 8 Color Attachment 0: GL_TEXTURE, 256x256, GL_RGBA8 Depth Attachment: GL_RENDERBUFFER_EXT, 256x256, GL_DEPTH_COMPONENT24 ***** FBO STATUS ***** Max Number of Color Buffer Attachment Points: 8 Color Attachment 0: GL_TEXTURE, 256x256, GL_RGBA8 Depth Attachment: GL_TEXTURE, 256x256, GL_DEPTH24_STENCIL8_EXT
■まとめ
実験の結果から、アタッチできるのはレンダーバッファかテクスチャかどちらか1方であることがわかった。
すでにアタッチされている場合、それは解除され新しく設定したほうが、
対象先の有効なアタッチ先となる。
個人的にはレンダーテクスチャのアタッチだけでいい気もする。
パフォーマンスもそんなに損なわれないのであれば、あるいは許容できる範囲なら、
Renderbufferを使用せず、RenderTextureだけで実装した方が
シンプルにまとまっていい感じになるような、そう思います。
コメント