2016-07-05 13 views
2

Qt 5.4のバージョン以降、OpenGLレンダリング機能を有効にするためにQOpenGLWidgetが導入されました。通常のQWidgetよりQOpenGLWidgetを使用するメリット

OpenGL APIを呼び出す以外に、QOpenGLWidgetをQPainterが使用される通常のQWidgetとして使用することもできます。

私はウィジェットをレンダリングするためにOpenGL APIを直接呼び出すつもりはないが、QPainter APIだけをレンダリングする予定がない場合は、QWidgetの代わりにQOpenGLWidgetを使用する利点(パフォーマンスはおそらく)があるのだろうか?

+1

これはメリットがあるかもしれません(私は "カジュアルな" QPainterを使ってもまだ高性能ではなく、OpenGL APIで 'QGLWidget'を使っていますが、誰が知っていますか?)。しかし、あなたがプラットフォーム+ハードウェア+ドライバ固有のものを混乱させるときは、二度考えるべきです。あなたのウィジェットはマシンごとに異なって見えるかもしれませんので、古いドライバの古いマシンでは新しいOpenGL機能を拒否したり、OpenGLでネットワーク表示の追加設定が必要な場合があります。 – ilotXXI

+0

QOpenGLWidget、集中的なOpenGL呼び出しが必要な場合を除き、そうですか? – Wayee

+0

'QOpenGLWidget'の目的は、OpenGLシーンをレンダリングするためにウィンドウの内側に矩形領域を持つことです。 'QOpenGLWidget'はウィンドウIDを持つ特定のリソースである必要があるため、3DドライバとOSが直接使用できるようにオーバーヘッドのみを持ちます。 – Velkan

答えて

1

QOpenGLWidgetは、QPainterを使用して直接ペイントした場合、OpenGLを使用しているすべてのペイントを行います。これは2つの主な目的の1つです。 QOpenGLWidgetQPainterを使用すると、ペインタAPIをGL状態のセットアップと描画呼び出しに変換する手間がありません。いくつかのOpenGLバックグラウンドを持っていて、Qtのデバッグビルドを使用している場合は、ソースをトレースしてQtがあなたの呼び出しをどのように変換するかを見ることができるので、効率的にOpenGLにマップする方法でペインタ呼び出しを発行できます。州の変更は高価なので、同じペン/ブラシなどを使用する操作を一括してバッチ処理するようにしてください。塗装はQOpenGL2PaintEngineExで行います。

関連する問題