Qtブログ(日本語)

高速化された2Dキャンバスのベンチマーク

作成者: Qt Group 日本オフィス|Mar 27, 2026 12:16:16 AM

このブログは「Accelerated 2D Canvas Benchmarks」を翻訳したものです。

この3部作の前編では、Qt Canvas Painterとその斬新な新機能についてご紹介しました。本記事では、2Dキャンバスのパフォーマンス向上の点に焦点を当て、パフォーマンスに対する私たちの包括的なアプローチがベンチマークでどのように表れるかを実証します。

まずは概要から始め、その後、実際にこれらの結果がどのように得られたのかについて説明していきましょう:

  • オンボードGPUや低スペックの外付けGPUを搭載したPCでは、Canvas Painterのパフォーマンスは、OpenGLバックエンドを使用したQPainterと比べて約2倍です。
  • 低スペックのAndroidタブレットでは、Canvas Painterのパフォーマンスは、OpenGLバックエンドを使用したQPainterと比べて約5倍です。
  • 高性能なAndroidタブレットでは、Canvas Painterのパフォーマンスは、OpenGLバックエンドを使用したQPainterと比べて約10倍です。

ここで、改めて必須の警告について触れておきましょう:

Qt Canvas Painterは、Qt 6.11におけるテクニカルプレビューです。つまり、現時点ではAPIやABIの安定性を保証するものではありません。

また、これらのベンチマークはQt 6.11.0 RCを使用して実施された点にも注目すべきです。Qtの高速化された2Dキャンバス機能の開発が進むにつれ、パフォーマンスはさらに向上する可能性が高いでしょう。

テスト方法

Qt Canvas Painterの主な目標の一つは、高いパフォーマンスを実現することであり、特にGPUを搭載したモバイル/組み込みデバイスにおいてそれを実現することです。これを検証するためには、当然ながら、実際のハードウェア上で、アクセラレーションされた2Dキャンバスに対する適切なベンチマークテストを行う必要があります。また、このベンチマークテストには、公平な比較を行うために、他の描画手法も含まれているべきです。

このため、Qt Canvas PainterとQPainterでまったく同じテストケースが実装されているQCPainterBenchアプリケーションを使用します。このアプリケーションには、個別に有効化または無効化できる以下の6つのテストが含まれています:

  1. ルーラー:短い直線や、表示・非表示が切り替わるテキスト要素のベンチマークです
  2. サークル: 丸みを帯びた端を持つ円や円弧のベンチマークです
  3. ベジェ曲線:グラデーション塗りつぶしを施したベジェ曲線グラフのベンチマークです
  4. 棒グラフ:長方形を描画して棒グラフを作成するベンチマークです
  5. アイコンとテキスト:小さな画像や短い静的テキストを描画するベンチマークです
  6. :静的なパスを変形・着色するベンチマークです

このアプリケーションを使えば、各テストケースを個別に有効にして結果を比較することで、個々の描画機能を比較することが可能になります。しかし、このブログ記事の目的としては、主に高速化された2Dキャンバス機能の平均的な予想パフォーマンスを大まかに把握したいと考えているため、そこまで詳細に掘り下げる時間はありません。そこで、デフォルトのテストが有効な状態でベンチマークを実行します。つまり、「Flower」以外のすべてのテストが有効になっている状態です。

包括的な結果を得るために、以下のシステムでテストを実施しています:

  • Lenovo ThinkPad P16 Gen 2。このシステムは、ノートPCおよびデスクトップPCの代表例となります。テストは、内蔵のIntel UHD Graphics 770 GPUと、専用NVIDIA RTX 2000 Ada GPUの両方を使用して行われました。
  • Lenovo Tab M10 HD。このシステムは、ローエンドの組み込みハードウェアの一例となります。チップセットはMediaTek Helio P22Tで、GPUはPowerVR GE8320を搭載しています。
  • Samsung  Galaxy Tab S8。このシステムは、ハイエンドな組み込みハードウェアの一例となります。チップセットはQualcomm SM8450  Snapdragon 8で、GPUはAdreno 730を搭載しています。

留意すべき点として、QPainter OpenGLのアンチエイリアシングは4倍MSAAを使用するように設定されています。これはパフォーマンスと品質のバランスが取れた設定であり、テストしたどのシステムにおいても、パフォーマンスの大幅な低下を引き起こすことはありません。Qt Canvas Painterは、独自の頂点ベースのアンチエイリアシングを使用しています。また、QSG_NO_VSYNC=1を使用してタイマーベースのレンダリングを強制しているため、結果はVSyncの影響を受けません。

こちらは、テスト対象の2台のタブレットでベンチマークアプリケーションが動作している様子を収めた短い動画です。

高速化された2Dキャンバスの結果

このテストでは、レンダリング回数を増やし(1回、2回、4回、8回など)、それが平均FPSにどのような影響を与えるかを測定しました。当初、レンダリング性能は画面の更新頻度によって制限されていましたが、レンダリング回数を増やし続けると、フレームが欠落するようになりました。

以下は、テスト対象となったすべてのシステムにおけるベンチマーク結果です。

 

結論

上記の結果からは多くの結論が導き出されますが、私が特に興味深いと感じた点は以下の通りです:

  • D3D12がD3D11やOpenGLよりも著しく高速である様子は、実に興味深いものです。Direct3D 12はこれら2つと比較して最新のAPIであるため、QRhiがこの低レベルなグラフィックスAPIの利点を活かして効率を向上させているのは理にかなっています。D3D11がOpenGLよりも遅いというのは不審に思われましたが、実際にその原因を突き止めて修正することができました。そのため、現在の開発版では、これらのバックエンドのパフォーマンスは実質的に同等となっています。
  • Androidタブレットでは、Vulkanのパフォーマンスの挙動が若干異なります。Galaxy S8では、VulkanとOpenGLのパフォーマンスはほぼ同等ですが、Lenovo M10では、VulkanのパフォーマンスがOpenGLよりも約20%低くなっています。これは、これらのデバイスのOpenGL ESドライバーが高度に最適化されているため、より低レベルのVulkan APIでは、このテストケースにおいてパフォーマンスの向上が得られないためだと考えられます。ただし、今後も他のシステムを用いてプロファイリングとテストを継続してまいります。
  • QPainterのラスタバックエンドでは、アンチエイリアシングの処理負荷が特に高くなります。CPU上でのアンチエイリアシング処理は処理速度が遅いことで知られているため、これは驚くべきことではありません。QPainterによるソフトウェアレンダリングは、アクセラレーションされたレンダリングオプションに比べて非常に遅いため、これらを比較することにはあまり意味がありません。Canvas Painterの頂点ベースのアンチエイリアシングは、品質は高いものの、QPainterの4倍MSAAアプローチよりもパフォーマンスへの影響がわずかに大きい可能性があります。Canvas PainterはオプションでMSAAアンチエイリアシングもサポートしているため、代替案としてベンチマークを行うことも可能です。
  • Galaxy S8は、「Canvas Painter」においてその真価を発揮します。高解像度ディスプレイ(2560×1600)と高速なQualcomm Adreno GPUは、QRhiアクセラレーション対応の「Canvas Painter」にとって最適な組み合わせです。すべてのテストでレンダリング回数を8に設定しても、画面のリフレッシュレートは120fpsを維持できます。

パフォーマンスの数値をまとめると、このブログ記事の冒頭と同じ結論に達します:

 

一般的なPCでは、Qt Canvas PainterのパフォーマンスはOpenGLバックエンドを使用したQPainterと比較して約2倍、低スペックのAndroidタブレットでは約5倍、ハイエンドのAndroidタブレットでは約10倍高速です。

 

私たちは、高速化された2Dキャンバスについて、具体的かつ実用的なベンチマークと正確な結果を提供できるよう最善を尽くしました。しかし、これらの結果が検証され、さまざまなシステムでのさらなる結果が得られると大変ありがたいです。そこで、皆様には最新のQt 6.11(プレリリース版)をインストールし、ご自身の開発環境、あるいはできればターゲットシステム上でQCPainterBenchを実際に実行していただくことをお勧めします。結果は、こちらのコメント欄やQtフォーラムのスレッドに投稿していただくか、CanvasPainterコンポーネントに関するQtバグトラッカーのチケットを作成していただくことができます。