1

OpenGLアプリケーション(OpenGLを直接呼び出さずにOgre3dとSDLを使用)があり、実行時に解像度を変更しようとしています。新しい解像度でOpenGLコンテキストを再初期化する必要があるようですが、途中で多くの項目が壊れています。Linuxでは、しばらくは機能しているように見えますが、その後、画面にグラフィックの破損が発生します。Windowsでは、次にフレームをレンダリングしようとするとクラッシュするだけです。Ogreでテクスチャのリロードを強制しました。テクスチャのみをレンダリングする場合(3Dモデルなし)、これは正常に機能しますが、3Dモデルはクラッシュを引き起こし、レンダリングする前にリロードしても効果はありません。

これが私たちが行っているOgre3d呼び出しの詳細な説明へのリンクです:http ://www.ogre3d.org/forums/viewtopic.php?f = 2&t = 62825

私たちが本当に知る必要があるのは、Openglコンテキストを再初期化するときに、どのリソースを復元する必要があるかということだけです。

OpenGLコンテキストを調整すると他のリソースに影響するのはなぜですか?それはOpenGLの動作方法ですか、それとも私たちが使用するライブラリの1つがこの問題を引き起こしましたか?知らないうちにこの問題を追加できたでしょうか?

4

2 に答える 2

1

OpenGL サポートは、SDL の表面コードが確立された後に追加されました。そのため、SDL ウィンドウのサイズを変更すると破壊的になります。OpenGL コンテキスト共有とその警告を指摘されました。ただし、OpenGLウィンドウの作成にSDLを使用しないことで、問題を完全に回避できます。SDL が管理するウィンドウがなくても、SDL が提供する他のすべての機能を使用できます。したがって、変更されるのは、入力イベントの処理とウィンドウの作成方法だけです。SDL の代わりに GLFW を使用します。SDL と同様に、独自のイベント処理ループを実装する必要があるため、OpenGL ウィンドウとコンテキスト作成のドロップイン代替として GLFW を使用するのは簡単です。

于 2011-02-03T11:21:50.460 に答える
1

このフォーラムのスレッドをご覧になりましたか?

解像度を変更すると、SDL は OpenGL を破壊するようです。この場合、すべてのGL リソースがコンテキストとともに破棄されます。

考えられる解決策の 1 つは、別の「ダミー」GL コンテキストを作成し、リソースを「実際の」GL コンテキストと共有し、SDL でそれを存続させて「メイン」コンテキストを破棄することです。このようにして、ほとんどのリソースが存続するはずです。

一部のリソースは共有できないことに注意してください。テクスチャと VBO は問題ありませんが、VAOは共有できません。

于 2011-02-03T07:18:15.000 に答える