1

iOS で非常に奇妙な VAO の問題が発生しています。

問題は、新しく作成された VAO が作成直後に無効になることです。

glGenVertexArrayOES(1, &vao) を使用して通常の方法で VAO を作成するコードがあります。次に、それをバインド (glBindVertexArrayOES) し、すべての頂点バインディングなどを設定してから、ゼロ VAO をバインドして、glBind 呼び出しが誤って書き込まれないようにします。この時点で glIsVertexArrayOES(vao) を呼び出すと、true が返されます。

私のコードはジョブ グラフとして構造化されており、ジョブは順序付けられたキューにプッシュされ、ピックアップされてスレッドプールで実行されます。それにもかかわらず、OpenGL の場合、GL を呼び出すコードは 1 つのスレッドでのみ実行します。これを確実にするためにスレッドアフィニティを持っています。

今。コードが実行され、VAO が作成され、関数が終了します。次に、次のジョブを取得して同じスレッドで実行し、新しく作成された VAO を使用しようとします。この時点で glIsVertexArrayOES を呼び出すと (文字通り、構築のほぼ直後)、false が返されます。

それを無視して使用しようとしても失敗します。

glDeleteVertexArraysOES にブレークポイントがありますが、それが呼び出されません。とても奇妙です... VAOを正常に作成し、関数を終了し、新しく作成されたVAOを同じスレッドで使用しようとして(したがって、コンテキストと共有グループの問題を回避します)、失敗します。

どんな助けや洞察も大歓迎です!

4

0 に答える 0