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