簡単なアプリケーションがあります。2つのスレッドがあり、それぞれに独自のレンダリングコンテキストがありますが、1つのVBOを共有しています(これは機能しており、テストしました)。
ここで私が欲しいのは、1つのスレッドがVBOの前半から一部のデータをレンダリングし、2番目のスレッドがVBOの2番目の部分を更新していることです。
VBOを更新しない場合、問題なく動作しています。
しかし、更新時に奇妙な問題がいくつかあります。glMapBuffer
(2番目のスレッドで)VBOを更新するために使用すると、ほとんどの場合、最初のスレッドでは何もレンダリングされませんglClear
。画面全体が(呼び出し後)クリアになります。VBOからのデータにアクセスできないようです(これは理解できます。これは、バッファー全体がマップされており、何らかの方法でロックできるためです)。
をglMapBufferRange
使ってみましたGL_MAP_UNSYNCHRONIZED_BIT
。これは、「あなたが望むようにVBOを待たずに使用しないでください。私(プログラム)が自分で同期するからです」を意味します。また、VBOの範囲をマップして別の部分からデータをレンダリングするとき、それは待っているべきではありませんが、私と同じ問題が発生していますglMapBuffer
。
誰かがこれを修正するのを手伝ったり、なぜそれが起こるのか説明したりできますか?