マルチスレッド アプリケーションを使用しており、さまざまなスレッドでレンダリングしようとしています。最初に、すべてのスレッド間で同じレンダリング コンテキストを使用しようとしましたが、他のスレッドの現在のコンテキストが NULL になっていました。インターネットで、1 つのコンテキストは一度に 1 つのスレッドでしか最新にできないことを読みました。
そこで、違うものを作ることにしました。ウィンドウを作成し、そこから HDC を取得し、最初の RC を作成します。その後、この HDC をスレッド間で共有し、新しいスレッドを作成するたびに、同じ HDC から新しい RC を取得し、そのスレッドの最新の RC にします。これを行うたびに、返される RC は常に異なります (通常は前の値 + 1)。wglGetCurrentContext()
RC を返すかどうかを確認するアサーションを行いますが、作成されたばかりのものを返すようです。しかし、レンダリングを行った後、レンダリングが行われず、呼び出すGetLastError()
とエラー 6 (無効なハンドル??) が発生します。
これは、 の新しい呼び出しが行われるたびに新しい値が返されるにもかかわらずwglCreateContext()
、どういうわけか、これらすべての異なる値が OpenGL 呼び出しに対する同じ「接続チャネル」であることを意味するのでしょうか?
これは、スレッドで以前のレンダリング コンテキストを常に無効にし、新しいレンダリング コンテキストでアクティブにする必要があるということですか? 私は本当にこの同期を常に行う必要がありますか、またはこの問題を回避する他の方法はありますか?