Jaa


Direct2D

Windows 7では GDI に替わる 2D グラフィックスの新しいネイティブ API として Direct2D が導入されます。Direct2D は Direct3D 10.1 上で動作します。つまり、Vista、Windows 7 であればハードウェアを問わずに動作します。

image

GPU の性能にも依存しますが、Direct2D の性能はGDI より高速で、プリミティブ単位のアンチエイリアシングも可能です。またGPUでレンダリングするので、GDI に比べ CPU の使用率も低くなります。

image image
                  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 のプログラミング手順は以下のようになります。

  1. D2D1CreateFactory() でファクトリー オブジェクトを作成
  2. ファクトリーからデバイス独立リソースを作成
    • ジオメトリ、画像、DirectWriteオブジェクトなど
  3. ファクトリー オブジェクトからレンダーターゲットを作成
  4. レンダーターゲットから他のデバイス依存リソースを作成
    • ブラシ、ビットマップなど
  5. レンダーターゲットを使ってプリミティブを描画
    • BeginDraw()
    • FillGeometry()
    • EngDraw()