2017-01-11 19 views
-2

ワーカーコンテキストとレンダリングコンテキストの2つのコンテキストがあります。セットアップ中、ワーカースレッドはシェーダとVBOを作成して設定します。次に、レンダリングスレッドはVBOを使用してVAOを作成し描画します。画面(または古い頂点、以下を参照)には何も表示されません。共有コンテキストで奇妙なOpenGLビヘイビア、シェーダが共有、VBOに問題があります

VAOを作成する前にレンダリングスレッドがVBOを作成できるようにすると、すべて動作し、ワーカースレッドで作成されたシェーダプログラムでレンダリングされた三角形が表示されます。

ワーカースレッドのVBO作成に戻すと本当に奇妙な部分ですが、まだ三角形が表示されますが、三角形のジオメトリを変更すると、元に戻すまで更新されませんレンダリングスレッドでのVBOの作成。

これは非常に奇妙です。どちらの方法でも、レンダリングコンテキストはワーカーコンテキストで作成されたシェーダを使用していますが、VBOを共有できないようですが、ワーカーコンテキストがVBOを作成するときに頂点が更新されず、

私はUbuntu 16にいます。これはglew、glbinding、そして最新のglfw3とUbuntuパッケージでコンパイルされています。

要約すると、VBOの作成と描画は、メインスレッドから、ワーカースレッドから作成されたシェーダで動作します。ワーカースレッド(同じ関数)を使用してVBOを作成しようとすると、レンダリングスレッドで使用されたときに古いデータが発生する新しいバッファにアクセスするようです...

+0

単独で行っていることの説明は、問題を診断するには不十分です。 –

+0

@NicolBolas知識を持っている人にとっては完全に十分でした。私は本当の教祖から5分で答えを得た。説明は完璧です。 – RobC

+0

"*説明は完璧です*"しかしあなたの説明はあなたが*他のスレッドのバッファをバインドしていないとは言いませんでした。あなたの説明から、私はその問題が何であるかを推測しなければなりません。だから、あなたの説明は「完璧」ではありませんでした。あなたの*ソースコード*は欠陥を簡単に示しています。 –

答えて

0

オブジェクトは単にバインドする必要があります。スレッドは、更新(この場合、ワーカースレッド)オブジェクトは、

glFlush();

が他のコンテキストへの更新が処理されていることを確認し、利用できるように使用する必要があります。

関連する問題