2

SDL と OpenGL を使用する完全に機能するエンジンがあります。OpenGL/SDL 画面にテクスチャ ボックスがありますが、ビデオ モードを変更しようとすると (たとえば、F11 で全画面表示に切り替える)、テクスチャが失われます (ボックスはただの白です)。まだ白いです (テクスチャ イメージが失われています)。これは、アプリケーションの途中でビデオ モードを変更できないということですか (たとえば、全画面表示に切り替えます)、それとも変更するたびに OGL テクスチャをリロードする必要があるということですか?

いくつかの追加メモ: Windows 7 で MinGW で CodeBlocks を使用しています。リンクしたライブラリは次のとおりです: SOIL (OGL でテクスチャを簡単にロードするためのライブラリ - http://www.lonesock.net/soil.html )、OpenGL32、Glu32そしてSDL。

問題を示す画像がいくつかあります (最初の画像はウィンドウ モードで、2 番目の画像はSDL_SetVideoMode(...) を呼び出してフルスクリーンに変更しようとしたときのものです - SDL_WM_ToggleFullScreen が機能しません。

ウィンドウモード(これが私が望む方法です):

フルスクリーン モード (テクスチャリングが失われます!!!):

4

2 に答える 2

2

OpenGL/SDL 画面にテクスチャ ボックスがありますが、ビデオ モードを変更しようとすると (たとえば、F11 で全画面表示に切り替える)、テクスチャが失われます (ボックスはただの白です)。まだ白いです (テクスチャ イメージが失われています)。これは、アプリケーションの途中でビデオ モードを変更できないということですか (たとえば、全画面表示に切り替えます)、それとも変更するたびに OGL テクスチャを再読み込みする必要があるということですか?

これは、使用するフレームワークがビデオ モードの変更をどのように実装するかに大きく依存します。

一般に、OpenGL コンテキストを削除すると、「共有」が確立されている別の OpenGL コンテキストがある場合を除いて、関連付けられているすべてのデータが失われます。これを使用して、アップロードされたすべてのデータをコンテキストの再作成間で永続的に保つことができます。ただし、単なるビデオ モードの変更では、通常、コンテキストの再作成は必要なく、通常はウィンドウの再作成も必要ありません。

ただし、使用するフレームワーク (SDL) は、ビデオ モードを変更するときにウィンドウとコンテキストを完全にクリーンアップするため、読み込まれたリソースが失われます。SDL の不安定な開発バージョンでは OpenGL のサポートが強化されており、コンテキストのティアダウンなしでビデオ モードを変更できます。

于 2013-06-09T10:29:05.403 に答える