本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

Texture Buffer Object (TBO)について

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

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

glGenTextures( 1, &tex ); // テクスチャオブジェクト

// テクスチャバッファオブジェクトの準備.
glGenBuffers( 1, &texBuf ); 
glBindBuffer( GL_TEXTURE_BUFFER, texBuf );
glBufferData( GL_TEXTURE_BUFFER, size, data, GL_STATIC_DRAW );

// テクスチャオブジェクトとTBOの関連付け
glBindTexture( GL_TEXTURE_BUFFER, tex );
glTexBuffer( GL_TEXTURE_BUFFER, GL_RGBA8, texBuf );

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

TBOの特徴

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

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

OpenGLプログラミング
すらりんをフォローする
すらりん日記

コメント

タイトルとURLをコピーしました