私は、CPUよりもglでいくつかの重い計算を行っています(gl/gpuはこれまでにCPUより100倍速く近似しています)が、通常の問題サイズが用意されているので、どれくらいの時間がかかるかを知るには良いプログレスバーが必要でした。qt内のgl計算の進捗状況を表示
私はQObject
から継承するようにクラスを設定し、しばらくの間毎回放出されるシグナルcurrentProgress(int)
を持っています。 残念ながら、私のプログラムは計算中にフリーズし、進行状況は見えません。 QCoreApplication::processEvents()
に解決策が見つかりましたが、もう1つ問題がありました。 この呼び出し中にウィンドウ全体の再描画がトリガーされ、ペイントイベントによってトリガーされるため、計算が無限再帰で呼び出されます。
ここで、これらの問題はプログラミングの直感的なスロットに何かを間違って設計したことを伝える信号なので、qtに最新のプログレスバーを表示する方法は何ですか?
また、計算を別のスレッドにプッシュしたいときは、おそらく新しいGLコンテキストを作成するか、少なくとも既存のコンテキストを移動する必要があります。だから、それが行く方法なら、誰かがQtでこれを達成する方法を私に説明するかもしれませんか?
EDIT
私はQGLWidgetに描くが、FBOを使用していない物事をより明確にするために。 おそらく、計算には独自のコンテキストを使用するのが最善ですが、それが正しい方法であるかどうかはわかりません。
新しい情報
だから私はあなたのアドバイスに従うことをしようとしたが、問題につまずきました。 QGLContext
はスクリーン/ GUIオブジェクトに接続されている必要がありますので、オフスクリーンを作成することはできません。
さらに、私はQGLWidget
を他のスレッドに流し込むことはできません。それはエラーQGLContext::makeCurrent(): Failed.
を返します私がそれについて読むすべてのエントリは、私のような同じ問題を抱えた人々でした。彼らは別のスレッドでレンダリングをしたいと思っていました。
あなたは再帰について正しいですが、答えがどうなるかはわかっていましたが、それは私が求める主な理由でした。しかし、あなたが描く方法は、私にとってはまったくプラットフォームではないように思えます。私の質問で編集したので、私の計算はすべてオフスクリーンです。 – Nobody
@Nobody Qtがpbuffer管理用のクラス( 'QGLPixelBuffer')を持っていると考えると、なぜプラットフォームに依存しないのでしょうか? –
@Christian:Aはウィンドウ固有のwgl関数について語っています。私もQTクラスを見ましたが、スレッド内に現在のコンテキストも必要ですが、コンテキストを取得しません。 – Nobody