DirectWrite

Published 12 February 09 10:02 AM | hiroyuk 

DirectWriteは文字・テキストをレンダリングする新しいネイティブAPIです。Direct2Dの上で動作するとき以下のようにハードウェア アクセラレーションされます(必ずしもDirect2Dを使わなければならないわけではありません、GDIとの相互運用が可能です)。ClearTypeを使って文字を滑らかに表示します。

  • ハードウェアでClearTypeフィルタとブレンドを実行
  • アプリケーションレベル ハードウェアキャッシング最適化が可能
  • グリフ描画時のWindows OSにおけるCPU使用を削減

image

上がGDI 下がDirectWrite

Direct2D上で描画する時の手順は以下のとおりです。

  1. DirectWriteファクトリー オブジェクトの作成(DWriteCreateFactory
  2. ファクトリー オブジェクトからテキストフォーマットを作成し(IDWriteTextFormat)、フォントやスタイルを指定する
  3. ファクトリー オブジェクトからレイアウトを作成(IDWriteTextLayout)、単純なテキストのときは不要
  4. Direct2Dレンダーターゲットに描画
    • 単純なUIテキストには DrawText()
    • キャッシュレイアウトにはDrawTextLayout()
    • カスタムレイアウトにはDrawGlyphRun()

GDI上で描画するときは以下のメソッドを使ってIDWriteFontIDWriteFontFaceからHFONTを作成します。

  • IDWriteGdiInterop::ConvertFontToLOGFONT()
  • IDWriteGdiInterop::ConvertFontFaceToLOGFONT()

逆にGDIフォントからDirecWrite用のフォントを生成するときは以下のメソッドを使います。

  • IDWriteGdiInterop::CreateFontFromLOGFONT()
  • IDWriteGdiInterop::CreateFontFaceFromHdc()

IDWriteBitmapRenderTarget::DrawGlyphRun()を使えば、ビットマップを生成することもできます。

DirectWriteのHelloWorldサンプルコードは Windows 7 SDK Beta にあります。

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