ID2D1CommandSink
COM公式ドキュメント
コマンドシンクは、コマンドリストに記録されたコマンドの再生をアプリケーションで受け取りたい場合に、あなた自身が実装します。
解説(Remarks)
ID2D1CommandSink を実装することで、コマンドリストに記録されたコマンドの再生を受け取ることができます。このインターフェイスは通常、コマンドリストを別の形式に変換する際に使用され、Direct2D のプリミティブとターゲット形式との間である程度の変換が必要となる場合に用いられます。
ID2D1CommandSink インターフェイスにはリソース作成メソッドはありません。リソースは、ID2D1CommandList が作成された Direct2D デバイスに論理的に関連付けられ、ID2D1CommandSink の実装に渡されます。
ID2D1DeviceContext が実装するすべてのメソッドが存在するわけではありません。
メソッド 25
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
描画が開始されようとしていることをコマンドシンクの実装に通知します。
戻り値
型: HRESULT
このメソッドは常に S_OK を返します。
ID2D1CommandSink の処理が完了したことを示します。
戻り値
型: HRESULT
メソッド/関数が成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
コマンドリストの終端で有効な HRESULT が返されます。
これにより、呼び出し元の関数またはメソッドは、ストリームの実装に対して失敗を通知できます。
以降のジオメトリのレンダリングに使用されるアンチエイリアスモードを設定します。
| antialiasMode | D2D1_ANTIALIAS_MODE | in | コマンドリストに対して選択されたアンチエイリアスモード。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
コマンドシンク内のタグに対応するタグを設定します。
| tag1 | ULONGLONG | in | プリミティブに関連付ける最初のタグ。 |
| tag2 | ULONGLONG | in | プリミティブに関連付ける2番目のタグ。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
テキストの新しい既定のアンチエイリアスモードを示します。
| textAntialiasMode | D2D1_TEXT_ANTIALIAS_MODE | in | テキストのアンチエイリアスモード。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
より詳細なテキストレンダリングパラメーターを示します。
| textRenderingParams | IDWriteRenderingParams* | inoptional | テキストレンダリングに使用するパラメーター。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
新しい変換を設定します。
| transform | D2D_MATRIX_3X2_F* | in | 設定する変換。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
この変換は、対応するデバイスコンテキストに適用されます。
新しいプリミティブブレンドモードを設定します。(ID2D1CommandSink.SetPrimitiveBlend)
| primitiveBlend | D2D1_PRIMITIVE_BLEND | in | 以降のプリミティブに適用されるプリミティブブレンド。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
単位モードは、以降の単位の意味をデバイス非依存ピクセル(DIP)からピクセルへ、またはその逆に変更します。コマンドシンクは DPI を記録しません。これは再生コンテキスト、または ID2D1PrintControl などの他の再生インターフェイスによって暗黙的に決まります。
| unitMode | D2D1_UNIT_MODE | in | 単位をどのように解釈するかを指定する列挙体。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
単位モードは、単位の解釈を DIP からピクセルへ、またはその逆に変更します。
描画領域を指定した色でクリアします。(ID2D1CommandSink.Clear)
| color | D2D1_COLOR_F* | inoptional | コマンドシンクをクリアする色。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
クリア色は、現在選択されているクリップおよびレイヤーの境界によって制限されます。
色が指定されていない場合、色はコンテキストによって解釈されます。例としては次のようなものがありますが、これらに限定されません。
- プリマルチプライドビットマップターゲットの場合は透明な黒。
- アルファ無視ビットマップターゲットの場合は不透明な黒。
- プリンターページの場合はコンテンツなし(または白)。
描画するグリフを示します。
| baselineOrigin | D2D_POINT_2F | in | ベースラインの左上隅。 |
| glyphRun | DWRITE_GLYPH_RUN* | in | レンダリングするグリフ。 |
| glyphRunDescription | DWRITE_GLYPH_RUN_DESCRIPTION* | inoptional | グリフに関する、レンダリングに使用しない追加情報。 |
| foregroundBrush | ID2D1Brush* | in | グリフを塗りつぶすために使用するブラシ。 |
| measuringMode | DWRITE_MEASURING_MODE | in | グリフに適用する計測モード。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
DrawText および DrawTextLayout は、コマンドシンクが処理される時点までにグリフランと矩形に分解されます。そのため、これらのメソッドはコマンドシンクでは使用できません。DrawTextLayout の呼び出し時にアプリケーションが追加のコールバック処理を必要とする場合があるため、このセマンティクスをコマンドリスト内で容易に保持することはできません。
2点間に引かれる線を描画します。
| point0 | D2D_POINT_2F | in | 線の開始点。 |
| point1 | D2D_POINT_2F | in | 線の終了点。 |
| brush | ID2D1Brush* | in | 線を塗りつぶすために使用するブラシ。 |
| strokeWidth | FLOAT | in | 線を塗りつぶすストロークの幅。 |
| strokeStyle | ID2D1StrokeStyle* | inoptional | ストロークのスタイル。指定しない場合、ストロークは実線になります。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
コマンドシンクに描画するジオメトリを示します。
| geometry | ID2D1Geometry* | in | ストロークするジオメトリ。 |
| brush | ID2D1Brush* | in | ストロークされたジオメトリを塗りつぶすために使用するブラシ。 |
| strokeWidth | FLOAT | in | ストロークの幅。 |
| strokeStyle | ID2D1StrokeStyle* | inoptional | ストロークのスタイル。 |
戻り値
型: HRESULT
HRESULT。
解説(Remarks)
四角形を描画します。
| rect | D2D_RECT_F* | in | コマンドシンクに描画する四角形。 |
| brush | ID2D1Brush* | in | ジオメトリをストロークするために使用するブラシ。 |
| strokeWidth | FLOAT | in | ストロークの幅。 |
| strokeStyle | ID2D1StrokeStyle* | inoptional | ストロークのスタイル。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
ビットマップをレンダーターゲットに描画します。(ID2D1CommandSink.DrawBitmap)
| bitmap | ID2D1Bitmap* | in | 描画するビットマップ。 |
| destinationRectangle | D2D_RECT_F* | inoptional | 描画先の四角形。既定ではビットマップのサイズとなり、位置はレンダーターゲットの左上隅になります。 |
| opacity | FLOAT | in | ビットマップの不透明度。 |
| interpolationMode | D2D1_INTERPOLATION_MODE | in | 使用する補間モード。 |
| sourceRectangle | D2D_RECT_F* | inoptional | 省略可能なソース四角形。 |
| perspectiveTransform | D2D_MATRIX_4X4_F* | inoptional | 省略可能な透視変換。 |
戻り値
このメソッドは値を返しません。
解説(Remarks)
destinationRectangle パラメーターは、ビットマップが表示されるターゲット内の四角形をデバイス非依存ピクセル(DIP)で定義します。これは、現在設定されている変換と、設定されている場合は透視変換の影響を受けます。NULL を指定した場合、描画先の四角形は (left=0, top=0, right = width(sourceRectangle), bottom = height(sourceRectangle) になります。
sourceRectangle は、ソースビットマップの部分四角形を DIP で定義します。DrawBitmap はこの四角形をソースビットマップのサイズにクリップするため、ビットマップの外側をサンプリングすることはできません。NULL を指定した場合、ソース四角形はソースビットマップのサイズとして扱われます。
perspectiveTransform は、デバイスコンテキスト上の変換に加えて指定されます。
指定された画像をコマンドシンクに描画します。
| image | ID2D1Image* | in | コマンドシンクに描画する画像。 |
| targetOffset | D2D_POINT_2F* | inoptional | 画像がレンダリングされる描画先空間でのオフセットを定義します。画像の論理的な範囲全体が、対応する描画先にレンダリングされます。指定しない場合、描画先の原点は (0, 0) になります。画像の左上隅がターゲットオフセットにマッピングされます。これは必ずしも原点になるとは限りません。 |
| imageRectangle | D2D_RECT_F* | inoptional | 画像の処理時に、画像空間内の対応する四角形が、指定された原点にマッピングされます。 |
| interpolationMode | D2D1_INTERPOLATION_MODE | in | 必要に応じて画像をスケーリングするために使用する補間モード。 |
| compositeMode | D2D1_COMPOSITE_MODE | in | 指定した場合、現在選択されているクリップの範囲に適用される合成モード。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
画像自体がコマンドリストである場合や、コマンドリストを含むエフェクトグラフを含む場合があるため、このメソッドは再帰的な処理を引き起こす可能性があります。
メタファイルをデバイスコンテキストに描画します。(ID2D1CommandSink.DrawGdiMetafile)
| gdiMetafile | ID2D1GdiMetafile* | in | 描画するメタファイル。 |
| targetOffset | D2D_POINT_2F* | inoptional | レンダーターゲットの左上隅からのオフセット。 |
戻り値
このメソッドは値を返しません。
解説(Remarks)
targetOffset は、画像がレンダリングされる描画先空間でのオフセットを定義します。画像の論理的な範囲全体が、対応する描画先にレンダリングされます。オフセットを指定しない場合、描画先の原点は (0, 0) になります。画像の左上隅がターゲットオフセットにマッピングされます。これは必ずしも原点になるとは限りません。
コマンドシンクによって塗りつぶされるメッシュを示します。
| mesh | ID2D1Mesh* | in | 塗りつぶすメッシュオブジェクト。 |
| brush | ID2D1Brush* | in | メッシュを塗りつぶすために使用するブラシ。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
コマンドシンク上で不透明度マスクを塗りつぶします。
| opacityMask | ID2D1Bitmap* | in | アルファチャネルをサンプリングして不透明度マスクを定義するビットマップ。 |
| brush | ID2D1Brush* | in | マスクを塗りつぶすために使用するブラシ。 |
| destinationRectangle | D2D_RECT_F* | inoptional | マスクを塗りつぶす描画先の四角形。指定しない場合、これは原点になります。 |
| sourceRectangle | D2D_RECT_F* | inoptional | 不透明度マスク内のソース四角形。指定しない場合、これはマスク全体になります。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
不透明度マスクのビットマップは、各軸でクランプされるものとみなす必要があります。
塗りつぶすジオメトリをコマンドシンクに示します。
| geometry | ID2D1Geometry* | in | 塗りつぶすジオメトリ。 |
| brush | ID2D1Brush* | in | ジオメトリを塗りつぶすために使用する主ブラシ。 |
| opacityBrush | ID2D1Brush* | inoptional | アルファチャネルを使用して主塗りつぶしブラシの不透明度を変更するブラシ。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
不透明度ブラシが指定されている場合、主ブラシは x 軸と y 軸の両方で固定されたビットマップブラシになります。
楕円と角丸四角形は、FillGeometry に渡される前に対応するジオメトリに変換されます。
塗りつぶす四角形をコマンドシンクに示します。
| rect | D2D_RECT_F* | in | 塗りつぶす四角形。 |
| brush | ID2D1Brush* | in | 四角形を塗りつぶすために使用するブラシ。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
クリッピング四角形をクリップおよびレイヤースタックにプッシュします。
| clipRect | D2D_RECT_F* | in | クリップを定義する四角形。 |
| antialiasMode | D2D1_ANTIALIAS_MODE | in | クリップのアンチエイリアスモード。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
現在のワールド変換が軸を保持しない場合、clipRectangle は変換され、変換後の四角形の境界が代わりに使用されます。
レイヤーをクリップおよびレイヤースタックにプッシュします。
| layerParameters1 | D2D1_LAYER_PARAMETERS1* | in | レイヤーを定義するパラメーター。 |
| layer | ID2D1Layer* | inoptional | 以降の描画操作を受け取るレイヤーリソース。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
軸に沿ったクリップをレイヤーおよびクリップスタックから削除します。
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
レイヤーをレイヤーおよびクリップスタックから削除します。
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID2D1CommandSink "{54D7898A-A061-40A7-BEC7-E465BCBA2C4F}" #usecom global ID2D1CommandSink IID_ID2D1CommandSink "{}" #comfunc global ID2D1CommandSink_BeginDraw 3 #comfunc global ID2D1CommandSink_EndDraw 4 #comfunc global ID2D1CommandSink_SetAntialiasMode 5 int #comfunc global ID2D1CommandSink_SetTags 6 int64,int64 #comfunc global ID2D1CommandSink_SetTextAntialiasMode 7 int #comfunc global ID2D1CommandSink_SetTextRenderingParams 8 sptr #comfunc global ID2D1CommandSink_SetTransform 9 var #comfunc global ID2D1CommandSink_SetPrimitiveBlend 10 int #comfunc global ID2D1CommandSink_SetUnitMode 11 int #comfunc global ID2D1CommandSink_Clear 12 var #comfunc global ID2D1CommandSink_DrawGlyphRun 13 int,var,var,sptr,int #comfunc global ID2D1CommandSink_DrawLine 14 int,int,sptr,float,sptr #comfunc global ID2D1CommandSink_DrawGeometry 15 sptr,sptr,float,sptr #comfunc global ID2D1CommandSink_DrawRectangle 16 var,sptr,float,sptr #comfunc global ID2D1CommandSink_DrawBitmap 17 sptr,var,float,int,var,var #comfunc global ID2D1CommandSink_DrawImage 18 sptr,var,var,int,int #comfunc global ID2D1CommandSink_DrawGdiMetafile 19 sptr,var #comfunc global ID2D1CommandSink_FillMesh 20 sptr,sptr #comfunc global ID2D1CommandSink_FillOpacityMask 21 sptr,sptr,var,var #comfunc global ID2D1CommandSink_FillGeometry 22 sptr,sptr,sptr #comfunc global ID2D1CommandSink_FillRectangle 23 var,sptr #comfunc global ID2D1CommandSink_PushAxisAlignedClip 24 var,int #comfunc global ID2D1CommandSink_PushLayer 25 var,sptr #comfunc global ID2D1CommandSink_PopAxisAlignedClip 26 #comfunc global ID2D1CommandSink_PopLayer 27 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ID2D1CommandSink "{54D7898A-A061-40A7-BEC7-E465BCBA2C4F}" #usecom global ID2D1CommandSink IID_ID2D1CommandSink "{}" #comfunc global ID2D1CommandSink_BeginDraw 3 #comfunc global ID2D1CommandSink_EndDraw 4 #comfunc global ID2D1CommandSink_SetAntialiasMode 5 int #comfunc global ID2D1CommandSink_SetTags 6 int64,int64 #comfunc global ID2D1CommandSink_SetTextAntialiasMode 7 int #comfunc global ID2D1CommandSink_SetTextRenderingParams 8 sptr #comfunc global ID2D1CommandSink_SetTransform 9 sptr #comfunc global ID2D1CommandSink_SetPrimitiveBlend 10 int #comfunc global ID2D1CommandSink_SetUnitMode 11 int #comfunc global ID2D1CommandSink_Clear 12 sptr #comfunc global ID2D1CommandSink_DrawGlyphRun 13 int,sptr,sptr,sptr,int #comfunc global ID2D1CommandSink_DrawLine 14 int,int,sptr,float,sptr #comfunc global ID2D1CommandSink_DrawGeometry 15 sptr,sptr,float,sptr #comfunc global ID2D1CommandSink_DrawRectangle 16 sptr,sptr,float,sptr #comfunc global ID2D1CommandSink_DrawBitmap 17 sptr,sptr,float,int,sptr,sptr #comfunc global ID2D1CommandSink_DrawImage 18 sptr,sptr,sptr,int,int #comfunc global ID2D1CommandSink_DrawGdiMetafile 19 sptr,sptr #comfunc global ID2D1CommandSink_FillMesh 20 sptr,sptr #comfunc global ID2D1CommandSink_FillOpacityMask 21 sptr,sptr,sptr,sptr #comfunc global ID2D1CommandSink_FillGeometry 22 sptr,sptr,sptr #comfunc global ID2D1CommandSink_FillRectangle 23 sptr,sptr #comfunc global ID2D1CommandSink_PushAxisAlignedClip 24 sptr,int #comfunc global ID2D1CommandSink_PushLayer 25 sptr,sptr #comfunc global ID2D1CommandSink_PopAxisAlignedClip 26 #comfunc global ID2D1CommandSink_PopLayer 27 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。