DirectWrite
DirectWriteは文字・テキストをレンダリングする新しいネイティブAPIです。Direct2Dの上で動作するとき以下のようにハードウェア アクセラレーションされます(必ずしもDirect2Dを使わなければならないわけではありません、GDIとの相互運用が可能です)。ClearTypeを使って文字を滑らかに表示します。
- ハードウェアでClearTypeフィルタとブレンドを実行
- アプリケーションレベル ハードウェアキャッシング最適化が可能
- グリフ描画時のWindows OSにおけるCPU使用を削減
上がGDI 下がDirectWrite
Direct2D上で描画する時の手順は以下のとおりです。
- DirectWriteファクトリー オブジェクトの作成(DWriteCreateFactory)
- ファクトリー オブジェクトからテキストフォーマットを作成し(IDWriteTextFormat)、フォントやスタイルを指定する
- ファクトリー オブジェクトからレイアウトを作成(IDWriteTextLayout)、単純なテキストのときは不要
- 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 にあります。