OpenCLを使用してグラフィックスを表示して、QOpenGLWidget
に表示するプロジェクトに取り組んでいます。これを行うrecommended wayは、すでにQOpenGLWidget
に存在するものの横に2番目のQOpenGLContext
を作成しているようですが、この2次的コンテキストがOpenCLコードと共に使用できるスレッドを作成します。Qt5でQOpenGLContextを現在の表面にする方法は?
このようにして、Qtはメインスレッドでイベントループが実行されているので、いつも通りです。そして、QOpenGLWidget
がペイントすることを決めるときはいつでも、セカンダリコンテキストとOpenCLインターオペラクションによって第2のスレッドで準備されたバッファからデータをフェッチします。
これはすべて紙の上で素晴らしいと思いますが、これを動作させるにはいくつか問題があります。私の質問は、セカンダリをスレッド内で "最新"にする方法です。 QOpenGLContext::makeCurrent()
はパラメータとしてQSurface
を必須とし、私が持っている唯一のサーフェイスはQOpenGLWidget
ですが、それをセカンダリスレッドで使用すると機能しません。次のエラーが表示されます。
Cannot make QOpenGLContext current in a different thread
どのようなサーフェスを使用しますか?または、私が逃したものがあるのか、それとも違うのでしょうか?
OpenCLベースのレンダラをお持ちの場合、なぜGLコンテキストが必要なのでしょうか?また、レンダラーが2番目のスレッドで実行され、準備ができたときにイメージを提供する場合、完成した新しいフレームを取得できることをGUIに通知するだけです。 OpenGLは必要ありません。または私は何かを逃していますか? GL/CL interopをやっていますか? – thokra
はい、interop :)申し訳ありませんが、私はそれを言及すべきでした。出力はglコンテキストで使用されます –