2

この質問は、OpenGL を使用するグラフィック アプリケーションに関するものです。(現時点ではフレームワークGLFWを使用していますが、変更を検討しています。)

私の目的は、ユーザーが (可能な限り) フルスクリーン モードとウィンドウ モードを継続的に切り替えられるようにすることです。この手順には 1 秒もかからず、実行時に発生する可能性があります。たとえば、ユーザーが事実上遅延なしでフルスクリーンを切り替えることができるゲーム Minecraft を参照してください。

ウィンドウの再作成プロセスにはそれほど時間がかかりません。しかし問題は、ウィンドウを閉じると OpenGL コンテキストが破棄され、すべてのシェーダーとバッファーをリロードする必要があることです。

OpenGL コンテキストを破棄せずにグラフィック アプリケーションのウィンドウを再作成する方法は? (GLFW を使用したいのですが、別のフレームワークや独自の実装についてはオープンマインドです。)

4

1 に答える 1

4

技術的には、OpenGLコンテキストはどのウィンドウにも関連付けられていません。重要なのは、ウィンドウの視覚的形式が、コンテキストが作成された視覚的形式の視覚的形式と一致することです。複数のウィンドウで単一のOpenGLコンテキストを使用することは完全に可能です。

あなたが直面している問題は、GLFW、SDL、GLUTなどのフレームワークがこの種の機能を公開していないことです。それは間違いなくいつか彼らに追加​​されるべき機能です。

ただし、ウィンドウとOpenGLコンテキストを自分で作成および管理する場合は、それを行うことができます。あなたが意図することの主なプロセスは次のとおりです。

  1. ウィンドウのビジュアルフォーマットを選択します(OSおよびグラフィックシステムに応じて、PIXELFORMATDESCRIPTOR、Visual、FBConfig)

  2. 最初のウィンドウを作成し、視覚的な形式を設定します

  3. ドローアブルとして最初のウィンドウに関してOpenGLコンテキストを作成します

  4. さらにウィンドウを作成し、選択済みとまったく同じ視覚形式に設定します。

これで、OpenGLコンテキストを現在のドローアブル(=ウィンドウ)から切り離し、互換性のあるビジュアル形式を持つ他のドローアブル(つまりウィンドウ)にアタッチできます。

于 2012-10-14T10:08:58.633 に答える