Jaa


DirectWrite

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上で描画するときは以下のメソッドを使ってIDWriteFontやIDWriteFontFaceからHFONTを作成します。

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

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

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

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

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