2016-09-22 13 views
0

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

どのようなサーフェスを使用しますか?または、私が逃したものがあるのか​​、それとも違うのでしょうか?

+0

OpenCLベースのレンダラをお持ちの場合、なぜGLコンテキストが必要なのでしょうか?また、レンダラーが2番目のスレッドで実行され、準備ができたときにイメージを提供する場合、完成した新しいフレームを取得できることをGUIに通知するだけです。 OpenGLは必要ありません。または私は何かを逃していますか? GL/CL interopをやっていますか? – thokra

+0

はい、interop :)申し訳ありませんが、私はそれを言及すべきでした。出力はglコンテキストで使用されます –

答えて

関連する問題