FBOとPBOの違いは何ですか?オフスクリーンレンダリングにはどちらを使用すればよいですか?
[〜#〜] fbo [〜#〜] (フレームバッファオブジェクト)は、デフォルトのフレームバッファまたは画面以外の画像をレンダリングできるターゲットです。
[〜#〜] pbo [〜#〜] (Pixel Buffer Object)は、ピクセルデータの非同期転送を許可します。デバイスから。これは、ピクセル転送を待っている間に実行できる他のことがある場合に、レンダリング時の全体的なパフォーマンスを向上させるのに役立ちます。
FBOとPBOの違いは何ですか?
より良い質問は、それらがどのように類似しているかです。それらについて類似しているのは、それらの名前だけです。
フレームバッファオブジェクト (大文字と小文字の区別:フレームバッファは2つではなく1つの単語です)は、レンダリングターゲットとして使用できる複数の画像を含むオブジェクトです。
テクスチャまたは単に 非画面フレームバッファ にレンダリングする場合は、FBOを使用します。ピクセルデータをアプリケーションに非同期で読み戻そうとしている場合、またはピクセルデータをOpenGLイメージに非同期的に転送しようとしている場合は、PBOを使用します。
それらは同じではありません。
私は読むでしょう VBO、PBO、FBO :
Appleは、PBOとFBOを示す2つの非常に優れたサンプルコードを投稿しました。これらはMac固有ですが、サンプルコードとしては、PBOとFBOはOpenGL拡張機能であり、ウィンドウシステム拡張機能ではないため、どのプラットフォームにも適しています。
では、これらすべてのオブジェクトは何ですか?状況は次のとおりです。
何かを強調したい。
[〜#〜] fbo [〜#〜]メモリブロックではありません。ポインタの構造体のように見えると思います。テクスチャを使用するには、FBOにテクスチャをアタッチする必要があります。テクスチャをアタッチした後、オフスクリーンレンダリングまたはセカンドパス効果のためにテクスチャに描画できるようになりました。
struct FBO{
AttachColor0 *ptr0;
AttachColor1 *ptr1;
AttachColor2 *ptr2;
AttachDepth *ptr3;
};
一方、[〜#〜] pbo [〜#〜]はメモリブロック「メモリの種類を保持するブロック」です。xサイズのmallocと考えてみてください。それからtexture/FBOまたはそれにデータをコピーするmemcpy」。
ホストメモリとインターフェイスするための中間メモリバッファを作成し、OpenGL描画を停止せずに、ホストとの間でテクスチャをアップロードします。