Windows グラフィックス アーキテクチャの概要

Windows には、グラフィックス用の C++/COM API がいくつか用意されています。 これらの API を次の図に示します。

Windows グラフィックス API を示す図。

  • グラフィックス デバイス インターフェイス (GDI) は、Windows 用の元のグラフィックス インターフェイスです。 GDI は最初に 16 ビット Windows 用に記述され、次に 32 ビットおよび 64 ビット Windows 用に更新されました。
  • GDI+ は、GDI の後継として Windows XP で導入されました。 GDI+ ライブラリは、フラット C 関数をラップする一連の C++ クラスを介してアクセスされます。 .NET Frameworkでは、System.Drawing 名前空間の GDI+ のマネージド バージョンも提供されます。
  • Direct3D では、3-D グラフィックスがサポートされます。
  • Direct2D は、GDI と GDI+ の両方の後継となる 2-D グラフィックス用の最新の API です。
  • DirectWriteは、テキスト レイアウトとラスター化エンジンです。 GDI または Direct2D を使用して、ラスター化されたテキストを描画できます。
  • DirectX グラフィックス インフラストラクチャ (DXGI) は、出力用のフレームの提示など、低レベルのタスクを実行します。 ほとんどのアプリケーションでは、DXGI を直接使用しません。 代わりに、グラフィックス ドライバーと Direct3D の中間レイヤーとして機能します。

Direct2D とDirectWriteは Windows 7 で導入されました。 また、プラットフォーム更新プログラムを通じて Windows Vista および Windows Server 2008 でも使用できます。 詳細については、「 Windows Vista のプラットフォーム更新プログラム」を参照してください。

Direct2D は、このモジュールの焦点です。 GDI と GDI+ は引き続き Windows でサポートされますが、新しいプログラムには Direct2D とDirectWriteをお勧めします。 場合によっては、テクノロジの組み合わせの方が実用的な場合があります。 このような状況では、Direct2D とDirectWriteは GDI と相互運用するように設計されています。

次のセクションでは、Direct2D の利点の一部について説明します。

ハードウェアの高速化

ハードウェア アクセラレーションという用語は、CPU ではなくグラフィックス処理装置 (GPU) によって実行されるグラフィックス計算を指します。 最新の GPU は、グラフィックスのレンダリングに使用される計算の種類に対して高度に最適化されています。 一般に、CPU から GPU に移動されるこの作業が多いほど、より優れています。

GDI は特定の操作のハードウェア アクセラレータをサポートしていますが、多くの GDI 操作は CPU にバインドされます。 Direct2D は Direct3D の上に階層化されており、GPU によって提供されるハードウェア アクセラレーションを最大限に活用します。 GPU が Direct2D に必要な機能をサポートしていない場合、Direct2D はソフトウェア レンダリングにフォールバックします。 全体的に見ると、ほとんどの状況では、Direct2D が GDI と GDI+ よりも優れたパフォーマンスを発揮します。

透過性とアンチエイリアシング

Direct2D では、ハードウェアアクセラレータによるアルファ ブレンド (透明度) が完全にサポートされています。

GDI では、アルファ ブレンドのサポートが制限されています。 ほとんどの GDI 関数はアルファ ブレンドをサポートしていませんが、GDI はビット単位の操作中にアルファ ブレンドをサポートします。 GDI+ は透過性をサポートしていますが、アルファ ブレンドは CPU によって実行されるため、ハードウェア アクセラレーションのメリットはありません。

ハードウェアアクセラレータによるアルファ ブレンドでは、アンチエイリアシングも可能になります。 エイリアシング は、連続関数のサンプリングによって発生する成果物です。 たとえば、曲線をピクセルに変換すると、エイリアシングによってジャグが発生する可能性があります。 エイリアシングによって引き起こされる成果物を削減する手法は、アンチエイリアシングの一種と見なされます。 グラフィックスでは、アンチエイリアシングは、エッジと背景をブレンドすることによって行われます。 たとえば、GDI によって描画される円と、Direct2D によって描画された同じ円を次に示します。

direct2d でのアンチエイリアシング手法の図。

次の図は、各円の詳細を示しています。

前の画像の詳細。

GDI によって描画される円 (左) は、曲線に近似する黒いピクセルで構成されます。 Direct2D によって描画される円 (右) はブレンドを使用して、より滑らかな曲線を作成します。

GDI では、ジオメトリ (線と曲線) を描画するときのアンチエイリアシングはサポートされていません。 GDI では、ClearType を使用してアンチエイリアステキストを描画できます。ただし、それ以外の場合は、GDI テキストもエイリアス化されます。 特にテキストのエイリアシングは目立ちます。これは、ジャグ線によってフォントデザインが乱れ、テキストが読みにくくなるためです。 GDI+ ではアンチエイリアシングがサポートされていますが、CPU によって適用されるため、Direct2D ほどパフォーマンスは良好ではありません。

ベクター グラフィックス

Direct2D では ベクター グラフィックスがサポートされています。 ベクター グラフィックスでは、数式を使用して線と曲線を表します。 これらの数式は画面の解像度に依存しないため、任意のディメンションにスケーリングできます。 ベクター グラフィックスは、さまざまなモニター サイズや画面解像度をサポートするためにイメージをスケーリングする必要がある場合に特に便利です。

次へ

デスクトップ ウィンドウ マネージャー