2

FBO拡張機能を使用してフレームをテクスチャに描画するアプリケーションがあります。

これらのフレームは、アプリケーションの実行中に開かれるさまざまなウィンドウに表示されます。これは、新しいウィンドウのOpenGLコンテキストが作成されてwglShareLists呼び出される前に、テクスチャを作成してプールできることを意味します。

現在、私はやらなければならずglReadPixels、テクスチャを別のウィンドウコンテキストに移動する必要がありますが、これはかなり非効率的ですglMapBufferRangeglTexSubImage

これを改善する方法について何かアイデアはありますか?プログラムの起動中に、複数の(いつでも最大数のウィンドウまで)OpenGLコンテキストと非表示のウィンドウを作成する必要がありますか?そのオーバーヘッドは何でしょうか?

またはさらに良いことに、既存のOpenGLコンテキストと将来のOpenGLコンテキストの間でテクスチャを共有する方法はありますか?

4

1 に答える 1

14

OpenGLコンテキスト間でリストを共有すると、バッファオブジェクト(テクスチャ、頂点バッファオブジェクト、ピクセルバッファオブジェクト)をカプセル化するすべてのデータも共有されますが、抽象コレクションオブジェクト(フレームバッファオブジェクト、頂点配列オブジェクト)は共有されません。共有の前に名前を作成すると名前空間の衝突が発生する可能性があるため、新しいコンテキストで新しい名前付きオブジェクトを作成する前に、共有を作成する必要があります。作成済みのオブジェクトは共有されます。しかし、これにはもちろん注意が必要です。コンテキストAとコンテキストBの両方にID=1のテクスチャがある場合はどうなるでしょうか。ただし、Aに多くのテクスチャがあり、Bにテクスチャがない場合は、Aのテクスチャ名をBにうまく転送できます。それが警告です。

ただし、複数のウィンドウにレンダリングするだけの場合:PIXELFORMATDESCRIPTORに互換性がある限り、任意の数のウィンドウで単一のOpenGLコンテキストを使用することは完全に可能です。これが、wglMakeCurrentのHDCパラメーターの目的です。コンテキストが単一のウィンドウに厳密にバインドされている場合、wglMakeCurrentにはHRCパラメーターしかありませんでした。

于 2012-11-27T10:45:15.617 に答える