Direct2D について
このトピックでは、Win32 開発者が優れたパフォーマンスとビジュアル品質で 2-D グラフィックス レンダリング タスクを実行できるようにする API である Direct2D について説明します。
Direct2D とは
Direct2D は、2-D ジオメトリ、ビットマップ、テキストに対してハイ パフォーマンスと高品質のレンダリングを提供する、ハードウェア アクセラレータのイミディエイト モードの 2-D グラフィックス API です。 Direct2D API は、GDI、GDI+、または Direct3D を使用する既存のコードと相互運用するように設計されています。
Direct2D は、主に次の開発者クラスで使用するように設計されています。
- エンタープライズ規模の大規模なネイティブ アプリケーションの開発者。
- ダウンストリーム開発者が使用するためのコントロール ツールキットとライブラリを作成する開発者。
- 2-D グラフィックスのサーバー側レンダリングを必要とする開発者。
- Direct3D グラフィックスを使用し、メニュー、ユーザー インターフェイス (UI) 要素、およびヘッドアップ ディスプレイ (HUD) のシンプルで高性能な 2-D およびテキスト レンダリングを必要とする開発者。
Direct2D の理由
Microsoft Windows で新しい 2-D グラフィックス API を作成する主な動機は次のとおりです。
- Windows ユーザーが慣れ親しんでいる視覚の豊かさのレベルの増加に対応するため。
- 開発者が、実行されている PC のグラフィックス処理ハードウェアに直接スケーリングする 2-D レンダリング コードを記述できるようにします。
- 開発者がサービスのコンテキストで実行できる 2-D グラフィックスをレンダリングするためのコードを記述できるようにします。
近年、エンド ユーザーはデジタル エクスペリエンスにおける視覚的忠実性の向上を期待し始めています。 この傾向は、家電に反映されています。 GPSデバイス、メディア再生デバイス、携帯電話、デジタルカメラは、毎年一貫して豊富なエクスペリエンスを提供します。 この傾向は、映画、テレビ、ビデオゲーム、Web 上のグラフィカル コンテンツの多様性にも見られます。 これらの変更に対応するために、開発者は常に既存の Windows アプリケーションを次のレベルのビジュアルリッチに移行するように求められます。
最新の Windows PC のグラフィックス プロセッサも、ビデオ ゲーム グラフィックスの進歩と Windows Media Center や Aero などの Windows エクスペリエンスの一部によって、着実に進化しています。 一部の Windows アプリケーションでは、Microsoft Direct3D と Windows Presentation Foundation (WPF) を使用して最新の GPU を利用できます。 Direct3D はハイエンドの 3-D グラフィックス アプリケーションを提供し、WPF は .NET 開発者のニーズに対応しますが、GDI と GDI+ に基づくレンダリング コードの既存のコードベースが大きい開発者や、Direct3D ベースのアプリケーションに高品質の 2-D グラフィックスを組み込みたい開発者にはギャップがあります。
最後に、サービスで使用できるグラフィックス API の必要性は、エンタープライズおよび Web 開発のシナリオで作業する開発者にとって新たな要件となっています。 既存のレンダリング API は、単一ユーザー セッションでのクライアント側のレンダリングに重点を置きます。 そのため、サービス コンテキストで使用すると、堅牢性とスケーラビリティの領域が不足する可能性があります。 これに対処するには、新しい API が必要です。
最大可用性を備えた高パフォーマンス
Direct2D は、Direct3D 10.1 API を使用して構築されたユーザー モード ライブラリです。 つまり、Direct2D アプリケーションは、最新のメインストリーム GPU でのハードウェアアクセラレータレンダリングの恩恵を受けることができます。 ハードウェア アクセラレーションは、Direct3D 10 レベル 9 レンダリングを使用して、以前の Direct3D 9 ハードウェアでも実現されます。 この組み合わせは、既存の Windows PC 上のグラフィックス ハードウェアで優れたパフォーマンスを提供します。
Note
Windows 8以降、Direct2D は Direct3D 11.1 API を使用して構築されます。
次の図は、Direct2D の階層化されたアーキテクチャを示しています。
ハードウェア アクセラレーションの使用が不可能なシナリオの場合、Direct2D には高性能ソフトウェア ラスタライザーが含まれています。 ソフトウェアでレンダリングする場合、Direct2D を使用するアプリケーションでは、GDI+ と同様のビジュアル品質よりもレンダリング パフォーマンスが大幅に向上します。 ソフトウェア ラスタライザーは、サービス コンテキストで使用するように設計されています。
Direct2D を使用してレンダリングされるコンテンツは、Windows 7 オペレーティング システムのリモート デスクトップ プロトコル (RDP) インフラストラクチャを使用してリモートで表示することもできます。 開発者は、レンダリングをディスプレイ コンピューター上の GPU で処理するか、ローカルにレンダリングしてビットマップとして送信するかを選択できます。 この選択は、必要な塗りつぶし率とレンダリングされるグラフィックス プリミティブの量に基づいて行うことができます。 ディスプレイ コンピューターが Windows 7 より前のオペレーティング システムを実行している場合は、ネットワーク経由でビットマップを送信することによってリモートディスプレイレンダリングが実行されます。
Direct2D では、ソフトウェア フォールバック、リモート デスクトップ、サービス レンダリングを提供することで、Direct3D のパフォーマンスと高可用性を組み合わせた 1 つの API を提供することで、開発者はさまざまなシナリオでハイパフォーマンス レンダリングを 1 つの実装にできます。
画質
グラフィックスに Direct2D を使用するアプリケーションでは、GDI を使用して実現できるものよりも高いビジュアル品質を実現できます。 Direct2D では、プリミティブごとのアンチエイリアシングを使用して、レンダリングされたコンテンツ内の滑らかな曲線と線が提供されます。 また、2-D プリミティブをレンダリングするときの透明度とアルファ ブレンドも完全にサポートされています。 次の図は、GDI (左側) を使用してレンダリングされたエイリアス化されたコンテンツと、Direct2D (右側) によってレンダリングされるアンチエイリアス化されたコンテンツを比較しています。
開発者は、ベクター グラフィックスのエイリアスレンダリングを指定できます。 これは、ポインターやルーラーなどの UI 要素など、ハード ピクセル境界へのスナップが必要なシナリオで使用されます。GDI の出力スタイルを一致させる必要がある場合、またはマルチサンプルアンチエイリアシングまたはその他のメカニズムを使用してレンダリング プロセスの下流でアンチエイリアシングが実行される場合です。
相互運用性
Direct2D ベースのレンダリングの統合は、GDI および Direct3D とのサーフェス レベルの相互運用性により、開発者にとって簡単になります。 主に GDI、GDI+、または Direct3D でコンテンツをレンダリングするアプリケーションは、まず Direct2D を使用してアプリケーションの特定の領域をレンダリングし、レンダリングが主に Direct2D を介して実行されるモデルに移行します。主にプラグインまたはレガシ拡張のために GDI を使用します。
Direct2D を使用すると、高品質のテキストと Microsoft Windows イメージング コンポーネント (WIC) の高度なイメージング機能にDirectWriteを簡単に使用できます。
Direct2D 相互運用性の詳細については、Direct2D SDK の相互運用性に関するセクションを参照してください。
まとめ
Microsoft Direct2D を使用すると、開発者は、GDI よりも優れたビジュアル品質と、最新の GPU でスケーリングされるパフォーマンス特性を提供する 2-D グラフィックス機能をアプリケーションで構築できます。 Direct2D 相互運用性モデルを使用すると、開発者は GDI、GDI+、または Direct3D ベースのレンダリングと共に、アプリケーションの一部を一度に選択的に移行できます。
関連トピック