Direct2D
Windows 7では GDI に替わる 2D グラフィックスの新しいネイティブ API として Direct2D が導入されます。Direct2D は Direct3D 10.1 上で動作します。つまり、Vista、Windows 7 であればハードウェアを問わずに動作します。
GPU の性能にも依存しますが、Direct2D の性能はGDI より高速で、プリミティブ単位のアンチエイリアシングも可能です。またGPUでレンダリングするので、GDI に比べ CPU の使用率も低くなります。
GDI Direct2D with Antialiasing
Windows 7 で導入される WDDM 1.1 では GID から (DWMが管理する)GPU のメモリーに直接レンダリングできるようになるので、システム メモリーの使用量は減りますが、GPU でレンダリングが高速化されるわけではありませんので、既存の GDI アプリの描画が速くなることは期待できません。
Direct2D は GDI との相互運用をサポートしており、GDI HDC に Direct2D で描画することも(GDI互換レンダーターゲットを使用)、Direct2D レンダーターゲットに GDI で描画することもできます(CreateDCRenderTarget()を使用)。後者については Windows 7 SDK Beta の Direct2D サンプル GdiInteropSample をご覧ください。
Direct3D との相互運用もサポートされており、Direct3D 10 のサーフェイスに直接描画することができます(CreateDxgiSurfaceRenderTarget() を使用)。これも Windows 7 SDK Beta の Direct2D サンプルにあります。
Direct2D のプログラミング手順は以下のようになります。
- D2D1CreateFactory() でファクトリー オブジェクトを作成
- ファクトリーからデバイス独立リソースを作成
- ジオメトリ、画像、DirectWriteオブジェクトなど
- ファクトリー オブジェクトからレンダーターゲットを作成
- レンダーターゲットから他のデバイス依存リソースを作成
- ブラシ、ビットマップなど
- レンダーターゲットを使ってプリミティブを描画
- BeginDraw()
- FillGeometry()
- EngDraw()