私が理解しているように、初期の Qt バージョンにはモジュールはなく、グラフィカルを含むさまざまな機能を持つ個別のクラスがありました。OpenGL サポートは qt 1.2 で実現されました。ただし、QPainter、QImage は初期のバージョンに存在していました。では、これらのクラスはネイティブ (つまり、原始的なクラス) であると言うのは正しいでしょうか。opengl クラス - 非ネイティブ (結局のところ、separste ブランチです)? Qt で 2D グラフィックスを作成するための非ネイティブで代替的な方法としての Qtopengl のさらなる進化、(2D グラフィックスを作成するための) ネイティブ メソッドの進化に対するこのモジュールの影響について学びたいと思います。
2 に答える
「ネイティブ」が「ハードウェア支援」を意味する場合、その境界線はもはやそれほど明確ではありません. QPainter
はさまざまなペイント エンジンを使用してペイントを行うことができるため、単に a を使用するだけでは何の意味もありませQPainter
ん。
「ハードウェア支援」が単に CPU の従来の整数または浮動小数点実行ユニット以上のものを使用することを意味する場合、はい、ラスター ペイント エンジンは利用可能な場合はさまざまな SIMD/ベクトル化された操作を使用します。ラスター ペイント エンジンは、非 GL でのペイントに使用されるQImage
エンジンQPixmap
ですQWidget
。
「ハードウェア アシスタンス」が「グラフィック カード ハードウェアによってレンダリングされる」ことを意味する場合、OpenGL ペイント エンジンを使用する必要があります。QGLWidget
または にペイントするときに使用しますQQuickPaintedItem
。もちろん、ペイントはソフトウェアによって定義されます。ジオメトリのセットアップとシェーダーは単なるコードです。このソフトウェアは、汎用 CPU よりもはるかに高速に実行できるハードウェア上で実行されます。
最近では、固定機能の OpenGL パイプラインが多かれ少なかれ歴史的な成果物であることを考えると、 Qt でのすべてのレンダリングが純粋にソフトウェア技術を使用して行われていると言っても過言ではありませんが、ソフトウェアは汎用 CPU で実行できます。または、汎用 CPU で SIMD/ベクトル実行ユニットを活用するか、GPU で実行できます。
また、最近の一般的な Windows ドライバーは、blit 以外の GDI/gdiplus 描画を高速化しないとも言われています。したがって、ラスター エンジンを使用して 2D 描画を行う場合、特に XP などの古い Windows バージョンでは、Qt はプラットフォーム ネイティブの 2D 描画よりも高速になる可能性があります。