web-dev-qa-db-ja.com

OpenGLのフレームバッファオブジェクトとピクセルバッファオブジェクトの違いは何ですか?

FBOとPBOの違いは何ですか?オフスクリーンレンダリングにはどちらを使用すればよいですか?

44
alvatar

[〜#〜] fbo [〜#〜] (フレームバッファオブジェクト)は、デフォルトのフレームバッファまたは画面以外の画像をレンダリングできるターゲットです。

[〜#〜] pbo [〜#〜] (Pixel Buffer Object)は、ピクセルデータの非同期転送を許可します。デバイスから。これは、ピクセル転送を待っている間に実行できる他のことがある場合に、レンダリング時の全体的なパフォーマンスを向上させるのに役立ちます。

17
Reed Copsey

FBOとPBOの違いは何ですか?

より良い質問は、それらがどのように類似しているかです。それらについて類似しているのは、それらの名前だけです。

フレームバッファオブジェクト (大文字と小文字の区別:フレームバッファは2つではなく1つの単語です)は、レンダリングターゲットとして使用できる複数の画像を含むオブジェクトです。

ピクセルバッファオブジェクト は:

  1. A バッファオブジェクト 。 FBOはnotバッファオブジェクトです。繰り返しますが、フレームバッファは1ワードです。
  2. 非同期に使用されるバッファオブジェクト 画像への/画像からのピクセルデータのアップロード/ダウンロード

テクスチャまたは単に 非画面フレームバッファ にレンダリングする場合は、FBOを使用します。ピクセルデータをアプリケーションに非同期で読み戻そうとしている場合、またはピクセルデータをOpenGLイメージに非同期的に転送しようとしている場合は、PBOを使用します。

それらは同じではありません。

75
Nicol Bolas

私は読むでしょう VBO、PBO、FBO

Appleは、PBOとFBOを示す2つの非常に優れたサンプルコードを投稿しました。これらはMac固有ですが、サンプルコードとしては、PBOとFBOはOpenGL拡張機能であり、ウィンドウシステム拡張機能ではないため、どのプラットフォームにも適しています。

では、これらすべてのオブジェクトは何ですか?状況は次のとおりです。

11
Andrew Hare

何かを強調したい。

[〜#〜] fbo [〜#〜]メモリブロックではありません。ポインタの構造体のように見えると思います。テクスチャを使用するには、FBOにテクスチャをアタッチする必要があります。テクスチャをアタッチした後、オフスクリーンレンダリングまたはセカンドパス効果のためにテクスチャに描画できるようになりました。

struct FBO{
AttachColor0 *ptr0;
AttachColor1 *ptr1;
AttachColor2 *ptr2;
AttachDepth  *ptr3;
};

一方、[〜#〜] pbo [〜#〜]はメモリブロック「メモリの種類を保持するブロック」です。xサイズのmallocと考えてみてください。それからtexture/FBOまたはそれにデータをコピーするmemcpy」。

  • なぜPBOを使用するのですか?

ホストメモリとインターフェイスするための中間メモリバッファを作成し、OpenGL描画を停止せずに、ホストとの間でテクスチャをアップロードします。

4
wow2006