Direct2D

Published 06 February 09 10:18 AM | hiroyuk 

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()
Filed under: ,

Comments

No Comments
Anonymous comments are disabled

About hiroyuk

マイクロソフト㈱エバンジェリスト。北海道大学理学部物理学科卒。リアルタイム3Dグラフィックスを専門とし、グラフィックスやシェーダに関する技術文章を執筆・講演。 DirectX SDK日本語ドキュメントの開発に携わるとともに、Windows Presentation Foundation プログラミング(オーム社)、Game Programming Gemsシリーズ、リアルタイム レンダリング第2版(ボーンデジタル)、Texturing & Modeling, A Procedural Approach などを翻訳・監修、XAMLプログラミング(ソフトバンク クリエイティブ)を執筆。趣味は薪割り。

Search

This Blog

DirectX 情報

Silverlight 情報

Windows 情報

WPF 情報

並列コンピューティング情報

著書

Syndication

Page view tracker