1

私の質問は、SOIL (シンプルな opengl イメージ ライブラリ) スレッド互換性はありますか?

次のコードを実行すると:

Texture = SOIL_load_OGL_texture (
                 loc.c_str(),
                 SOIL_LOAD_AUTO,
                 SOIL_CREATE_NEW_ID,
                 SOIL_FLAG_POWER_OF_TWO
                 | SOIL_FLAG_MIPMAPS
                 | SOIL_FLAG_MULTIPLY_ALPHA
                 | SOIL_FLAG_COMPRESS_TO_DXT
                 | SOIL_FLAG_DDS_LOAD_DIRECT
                 | SOIL_FLAG_INVERT_Y
             );

(テクスチャをロードするため)

スレッドの外では問題なく動作しますが、 std::thread 内で実行するとエラーが発生します

Project2.exe の 0x592527FF (msvcr110d.dll) で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000000。

メニュー画面やスプラッシュ画面などでロードできるように、スレッド化できるようにしたいと考えています。私の質問は、SOIL がスレッドセーフでない場合、適切な解決策は、スレッドを実行してメニュー/スプラッシュ スクリーンなどを実行し、テクスチャをメイン スレッドにロードできるようにすることでしょうか?

4

1 に答える 1

1

OpenGL はスレッド バウンドです!これは、一度に 1 つのスレッドから GL コンテキストを呼び出すことができることを意味します。別の GL コンテキストでそれを行わない限り、マルチスレッドの方法を使用する場合は、共有コンテキストを作成できます - それぞれ別のスレッドで作成します。次に、別のスレッドでテクスチャをロードしながらメイン スレッドでレンダリングします。方法がわかりません。パフォーマンスに関してはかなり問題がありますが、とにかく試してみることができます。

于 2013-10-13T08:10:35.170 に答える