0

OpenGL は 2 つのバッファーを使用します。1 つは画面に表示するために使用され、もう 1 つはレンダリングを行うために使用されます。ちらつきを避けるために交換されます。(ダブルバッファリング)

別の「バッファ」を作成して(ビデオメモリを想定しています)、別の場所で描画できるようにすることは可能ですか。私が尋ねる理由は、いくつかの SFML Windows があり、OpenGL にそれぞれの独立したバッファーに描画するように指示できるようにしたいからです。現在、レンダリング バッファを制御できません。EDIT: ALL (各ウィンドウではない) ウィンドウ用に 1 つあります。window.Display() を呼び出すと、このバッファーの内容がウィンドウ内に表示される別のバッファーにコピーされます。(そういう仕組みだと思います。)

4

3 に答える 3

3

あなたが探している用語は「オフスクリーン レンダリング」です。OpenGL でこれを行うには 2 つの方法があります。

1 つは、オペレーティング システムの基盤となるグラフィックス レイヤーによって提供される専用のオフスクリーン ドローアブルを使用することです。これを PBuffer と呼びます。PBuffer は、画面にマップされていないウィンドウと同じように使用できます。PBuffers は、OpenGL を使用してオフスクリーン レンダリングを実装する最初の堅牢な方法でした。これらは 1998 年に導入されました。PBuffers は完全な機能を備えたドローアブルであるため、OpenGL コンテキストをそれらにアタッチできます。

もう 1 つの方法は、オペレーティング システムではなく、OpenGL 自体によって提供されるオフスクリーン レンダー ターゲットを使用することです。これは、フレームバッファ オブジェクトと呼ばれます。FBO が機能するには、完全に機能する OpenGL コンテキストが必要です。しかし、FBO は、OpenGL コンテキストがアタッチされて機能するために必要なドローアブルを提供できません。したがって、FBO の主な用途は、画面に表示される画像をレンダリングするときに後で使用される中間画像をそれらにレンダリングすることです。幸いなことに、FBO が機能するためには、OpenGL コンテキストがバインドされているドローアブルが非表示になっている場合があります。したがって、ユーザーから隠されている通常のウィンドウを使用できます。

純粋なオフスクリーン レンダリングが必要な場合、特に GLX/X11 (Linux) では PBuffer が非常に有効なオプションであり、拡張機能をいじる必要なくすぐに使用できます。

于 2013-02-06T22:40:10.090 に答える
0

フレーム バッファ オブジェクト (FBO)を調べます。

于 2013-02-06T20:30:43.903 に答える
-1

3 番目のバッファがある場合、ダブル バッファリングの価値が失われます。ディスプレイ デバイスに送信されるピクセル配列へのポインタを変更しているため、ダブル バッファが機能します。3 番目のバッファーを含める場合は、各バッファーにコピーする必要があります。

私はしばらくの間 OpenGL を使用していませんでしたが、テクスチャ (ビットマップ) にレンダリングした方がよいのではないでしょうか。これにより、OpenGL の各実装で、そのビットマップをメモリから画面の適切な領域のビデオ バッファに取得する方法を選択できます。

于 2013-02-06T20:36:20.887 に答える