●描画
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" です。
ご指摘感謝です。
ありがとうございました。