仮想世界を作成するには私はLightweight Java Game Library(LWJGL)(Java + OpenGL)を使用しています。私は自分の地形をワーカースレッドのグラフィックスカードメモリにロードしたいのですが、メインスレッドではこれらをロードし、すでにロードされている地形をレンダリングしてレンダリングします。これを行うには、Vertex Array Object(VAO)を作成し、Vertex Buffer Object(VBO)を作成し、VBOをVAO属性リストに追加し、最後にすべてをレンダリングする必要があります。これはシングルスレッドシステムではうまく動作しますが、マルチスレッドシステムで実装する際に問題があります。 VBOはOpenGLコンテキスト間で共有できますが、VAOは共有できません(reference1; reference2)。 ;VBOを別のJavaスレッドにロードする方法
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER、ID):
- が
は、これらのメソッドを使用することにより、作業者のトレッドにVBOを作成し、メインスレッド上でVAOを作成します。したがって、私私の目標を達成するために、 int ID = GL15.glGenBuffers(); GL15.glBufferData(GL15.GL_ARRAY_BUFFER、バッファ、GL15.GL_STATIC_DRAW)。 GL20.glVertexAttribPointer(attributeNr、coordSize、GL11.GL_FLOAT、偽、0、0); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER、0);スレッド「メイン」org.lwjgl.opengl.OpenGLExceptionで
例外:素子アレイバッファオブジェクトが無効になっているとき、オフセットを使用することはできません
は、しかし、私はこの 例外を取得するには、メインスレッド上で、それをレンダリング
彼らはスコープをレンダリングの外にあるとき、私は地形をロードするので、私は、私がロードされていない地形をレンダリングしていないことを確信しています。私は、OpenGLの共有コンテキストと並行性に関する多くの記事、質問、ブログを読んだが、解決策を見つけることはできなかった。私はどんな助けにも非常に感謝しています。
は、我々は、特に1と3 – elect