Texture Buffer Object (TBO)について

どうやらこれはTextureBuffer-Objectではなく、Texture-BufferObject という意味であるとのことです。そしてこれは、VBO(Vertex buffer object)のバッファデータをテクスチャとして利用するための仕組みであるとのことです。

テクスチャのデータは glTexImage系の関数で準備をしますが、TBOについてはあくまでバッファオブジェクトなので glBufferData などでデータを転送します。そして転送後はこのバッファをテクスチャデータの供給元とすべく、テクスチャのIDとの関連付けを行います。これらの作業をコードで示すと以下のような感じになります。

注意点としては、関連付けるテクスチャを GL_TEXTURE_2Dではなく GL_TEXTURE_BUFFER にバインドする点でしょうか。

TBOの特徴

サンプラ不要でデータにアクセスすることが可能となる点が挙げられます。
通常の2Dテクスチャと違って samplerBuffer を使用することや texelFetch でインデックス指定でアクセスすることも違っています。TBOは1次元配列のように使うという感じでしょうか。

個人的に思うのはこれはジオメトリシェーダーからのストリームアウト(Transform feedback)での結果はVBOに書かれます。これをテクスチャとして使いたいケースでもあるのかなと思いました。
あるいは、バッファオブジェクトを作成して何らかのデータを格納しておきたいケースがあるとか。このデータをテクスチャとして参照することで、リードオンリーではあるものの割と大きなテーブルとして利用可能である、とか。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする