私はあるスレッドのテクスチャにレンダリングし、別のスレッドがこのテクスチャからデータを読み込むアプリケーションを持っています。 2つのスレッド間のコンテキストは共有されます。読み取りスレッドが部分的なデータを読み取る競合状態が発生する可能性はありますか?テクスチャを書き込んでいる間にテクスチャをレンダリングすることはできますか?
答えて
は、セクション5.3.1:
物体Tの内容は、セクション5.3に記載されるようなコマンドが完了したら変更されたと考えられます。コマンド1の完了は、
Finish
を呼び出すことによって、またはFenceSync
を呼び出して、関連付けられた同期オブジェクトに対してWaitSync
コマンドを実行することによって決定することができる。一般に
、データ競合のときの動作:
つ以上のスレッドがメモリ内の同じ場所に書き込む、およびスレッドの
少なくとも1つは
スレッド間の同期はありません。
あなたはOpenGLで、あなたの操作が同期されていることを知って戻るFinish()
またはWaitSync()
を待ついずれかの必要があることがわかります。
ルール4対象Tの内容は現在のコンテキスト以外のコンテキストで変更された場合、少なくとも、Tが結合しなければならないか、に付きRE:追加ルール、ノートセクション5.3.3があります現在のコンテクスト内の1つのバインディングポイント、または現在バインドされているコンテナオブジェクトCの少なくとも1つのアタッチメントポイントを含むことができる。
あなたがスレッドAでテクスチャへの書き込み、およびスレッドBでそれから読み取るのであれば、次の操作を行う必要があります:
は、同期オブジェクトを作成します。
書き込みが完了すると、スレッドAから同期オブジェクトに信号を送ります。
スレッドBの同期オブジェクト待ち
スレッドBにテクスチャを再バインド
これらの手順が完了したら、あなたはスレッドB.
ノートにテクスチャから読み取ることができます:あなたはそれをテストする場合は、データのレースでそのコードが「正常に動作」になるかもしれませんあなた自身のコンピュータ。これは驚くべきことではありません。時にはうまくいくことがあります。たぶんそれはあなたのコンピュータ上で動作し、他の誰かのコンピュータ上で爆破するでしょう。スレッド同期を使って物事を正しくする方が良い、テストだけでは十分ではありません。
可、はい、あります。
しかし、これは必ずしも必要ではありません。 GLsyncとglFinishで利用可能な細かい同期プリミティブがあり、それらを使用しない理由はありません。
データ競争の影響は正確には不明です。あなたはテクスチャの半分を読み終えるかもしれません、ドライバで致命的なエラーを引き起こすかもしれません、または単に停止するかもしれません。 the OpenGL 4.6 core specから
- 1. FBO:レンダリングされたテクスチャを描画するときに、テクスチャをレンダリングするときに間違ったテクスチャマッピング
- 2. VR View - レンダリング:image.jpgからテクスチャを読み込むことができません
- 3. DirectX:Compute Shaderでテクスチャに書き込む
- 4. テクスチャFBOテクスチャにレンダリングするときにわずかにオフになる
- 5. LWJGLでテクスチャ付きクワッドをレンダリングすると、白がレンダリングされますか?
- 6. 私のテクスチャはマヤで見ることができません
- 7. テクスチャにピクセルをレンダリングする
- 8. GLSLでSDLテクスチャをレンダリングできません
- 9. レンダーメッシュからレンダリングするテクスチャをテクスチャ2Dに変換
- 10. フレームバッファにバインドされたテクスチャにレンダリングできません
- 11. WebGLでテクスチャとしてアルファチャンネルをレンダリングできない
- 12. Direct3D11:デバイス間でテクスチャを共有する:黒いテクスチャ
- 13. 3Dテクスチャにレンダリングする
- 14. OpenGL 3.3では、テクスチャがレンダリングされません(黒いテクスチャ、C++、GLFW/SOIL)
- 15. LibGDXのテクスチャでビデオをレンダリングする
- 16. 球の中からテクスチャを見ることはできません。opengl-es
- 17. OpenCV GpuMatをOpenGLテクスチャとしてバインドすることはできますか?
- 18. WebGL - 大きなテクスチャをレンダリングするには?
- 19. DirectCompositionをテクスチャにレンダリングしますか?
- 20. XNAで3D空間でテクスチャをレンダリングする
- 21. GLKTextureLoaderは1つのテクスチャを読み込むことができます
- 22. 俳優の中にテクスチャを塗ることはできますか?
- 23. 相対パスを指定するとテクスチャを読み込むことはできません
- 24. テクスチャにレンダリングするときの画像ブレンドの問題
- 25. OpenGLでテクスチャを読み込んで表示するには
- 26. テクスチャにレンダリングするとテクスチャが完全に表示されない
- 27. マウスカーソルのテクスチャをC#でどのようにレンダリングできますか?
- 28. OpenGLテクスチャはレンダリングされません
- 29. フレームバッファオブジェクトを介してテクスチャにレンダリングする
- 30. Meshlab輸出テクスチャ間引き
はい、基本的にデータ競争のための完全な設定です。 –
@DietrichEpp私は、何かが2つの異なるスレッドから文脈に書き込んでいるときに問題が発生する可能性があることをオンラインで読んでいましたが、 – Kyle