●描画
Direct2D の描画は下記の 4通りあります。
・線描画
・塗りつぶし
・イメージ描画
・文字
ID2D1RenderTarget に対して適用できるものです。
それぞれグループ分けと、グループごとに指定出来る共通プロパティをまとめます。
◎線描画
・DrawEllipse (楕円)
・DrawGeometry (パス)
・DrawLine (直線)
・DrawRectangle (四角)
・DrawRoundedRectangle (角が丸い四角形)
ID2D1Brush
色や模様
Stroke
線の太さ (strokeWidth)
ID2D1StrokeStyle 線のスタイル
(端の形状、丸めたりとんがったり。線の形状、点線やダッシュ点線など)
◎塗りつぶし
・FillEllipse
・FillGeometry
・FillMesh (ID2D1Mesh の描画)
・FillOpacityMask (bitmap でマスク付き塗りつぶし)
・FillRectangle
・FillRoundedRectangle
ID2D1Brush
色や模様
◎イメージ描画
・DrawBitmap
・(FillOpacityMask)
◎文字
・DrawGlyphRun (IDWriteFontFace)
・DrawText (IDTextFormatIDWriteTextFormat) 2009/02/06 修正
・DrawTextLayout (IDWriteLeyoutIDWriteTextLayout) 2009/02/06 修正
ID2D1Brush
色や模様
●形状
形状の操作は Geometry で行います。
その場合も描画同様のプリミティブが使用できます。
多くの操作では同時に 3×2 Matrix (D2D1_MATRIX_3X2_F) を与えることが可能で、
形や座標判定用の命令も用意されています。
・ID2D1EllipseGeometry
・ID2D1PathGeometry
・ID2D1RectangleGeometry
・ID2D1RoundedRectangleGeometry
・ID2D1TransformedGeometry
CombineWithGeometry
複数の Geometry 同士の合成や演算を行います。
Tessellate
テセレートし、トライアングル化した状態にアクセスできるようにします。
Widen
線として描画する場合に、線を太らせた形状を取り出します。
●Mesh
ID2D1Mesh は直接描画データとしてポリゴン (Triangle) を与える場合に使用します。
非常にデバイスに近い低レベルな状態でデータをもてるものと思われます。
おそらく Geometry → Tessellate も Mesh 相当への変換です。
●DirectWrite
DirectWrite はフォント扱うモジュールとして完全に独立しているようです。
描画対象として Direct2D に拘る必要はなく Direct3D など何でも良いとのこと。
Direct3D11 との組み合わせもおそらく出来るでしょう。
当初は Direct2D のデータに変換して出力しているのかと思いましたが、独自の
レンダラを持っているようです。よく考えると ClearType などフォントに依存する
部分が大きいので当然かも。
フォントを扱うためにはデータとして形状を読み込むだけでなく、同時にレイアウト
も必要となります。このあたりのインターフェースは次の通り。
IDWriteFormat → IDWriteLeyout
IDWriteTextFormat → IDWriteTextLayout
Direct2D のテキスト描画も上記 2つの Interface に対応しています。
また文字単位の形状を直接描画することも可能で、それが GlyphRun 系の命令と
なっているようです。
今回はあまりきちんと試しておらず、メモ程度の内容となっています。
間違いなどあったら訂正していきます。
関連エントリ
・Direct2D (3) 互換性の検証と Vista で Direct2D
・Direct2D その(2) インターフェース
・Direct2D と Direct3D10.1 の下位互換
細かいですが…
IDWriteFormat -> IDWriteTextFormat
IDWriteLeyout -> IDWriteTextLayout
leyout でなく "layout" です。
ご指摘感謝です。
ありがとうございました。