ヘッダを読みながら整理してみました。
● RenderTarget
基本となるのが ID2D1RenderTarget です。いわゆるキャンバスのこと。
各種描画命令を使って RenderTarget の上に絵を描いていきます。
次のバリエーションがあります。
ID2D1RenderTarget → ID2D1BitmapRenderTarget → ID2D1HwndRenderTarget → ID2D1GdiInteropRenderTarget → ID2D1DCRenderTarget
それぞれ Bitmap (Texture) に描いたり、そのままウィンドウに描いたりできるということ。
ラインなどプリミティブを描画する命令もありますが、パス(Geometry) を使ったり
DirectWrite を併用してテキストも描くことができます。
描画時に SetTransform() で渡した 3×2 matrix が適用されるようです。
2D の回転、拡大縮小、平行移動などが可能。
● Geometry
Direct2D を特徴付ける存在といえるかもしれません。
ID2D1Geometry はパスや形状などジオメトリを格納します。
無理矢理例えれば Direct3D の VertexBuffer/IndexBuffer のような存在でしょうか。
パスを構成する要素、ラインやベジェ(2次、3次)、Arc を使用することができます。
Geometry の段階で Transform したり合成したり交差を考慮して演算したり、
といった操作が可能。結構自由度が高そうです。
ID2D1Geometry を継承しているインターフェースは次の通り。
ID2D1Geometry → ID2D1RectangleGeometry → ID2D1RoundedRectangleGeometry → ID2D1EllipseGeometry → ID2D1GeometryGroup → ID2D1TransformedGeometry → ID2D1PathGeometry
● Brush
ID2D1Brush は描画時に使用する状態を保持します。マテリアルやレンダーステートを
保持した StateBlock のようなイメージでしょうか。GDI にもあります。
下記の種類があります。
ID2D1Brush → ID2D1BitmapBrush → ID2D1SolidColorBrush → ID2D1LinearGradientBrush → ID2D1RadialGradientBrush
大きいのがこの 3つのグループです。
その関係は「 Geometry を Brush を使って RenderTarget に描画する 」ということ。
ID2D1RenderTarget, ID2D1Geometry, ID2D1Brush はどれも ID2D1Resource に
属しています。ID2D1Resource を継承しているインターフェースは他にもあります。
ID2D1Resource → ID2D1Bitmap → ID2D1GradientStopCollection → ID2D1Brush → ID2D1StrokeStyle → ID2D1Geometry → ID2D1Mesh → ID2D1Layer → ID2D1DrawingStateBlock → ID2D1RenderTarget
ID2D1Resource に属していないのは ~ Sink 系と ID2D1Factory のみ。
ID2D1SimplifiedGeometrySink ID2D1GeometrySink ID2D1TessellationSink
~Sink はまだよく理解していませんが、Geometry を操作する場合のイテレータの
ような存在ではないかと思われます。
関連エントリ
・Direct2D と Direct3D10.1 の下位互換