ID2D1Effect
COM公式ドキュメント
Direct2D における基本的な画像処理構成要素を表します。
解説(Remarks)
エフェクトは 0 個以上の入力画像を受け取り、1 つの出力画像を持ちます。エフェクトに入力される画像およびエフェクトから出力される画像は遅延評価されます。この定義により、あるエフェクトの出力画像をチェーン内の次のエフェクトの入力画像に渡すことで、アプリケーションから任意のエフェクトのグラフを構築できます。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定した入力画像をインデックスで設定します。
| index | DWORD | in | 設定する画像のインデックス。 |
| input | ID2D1Image* | inoptional | 設定する入力画像。 |
| invalidate | BOOL | in | エフェクト入力の位置でグラフを無効化するかどうか。 |
解説(Remarks)
入力インデックスが範囲外の場合、入力画像は無視されます。
アプリケーションがエフェクトへの入力数を変更できるようにします。
| inputCount | DWORD | in | エフェクトへの入力数。 |
戻り値
Type: HRESULT
このメソッドは HRESULT を返します。とり得る値には、次の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_INVALIDARG | 1 つ以上の引数が無効です。 |
| E_OUTOFMEMORY | 必要なメモリの割り当てに失敗しました。 |
解説(Remarks)
ほとんどのエフェクトは可変数の入力をサポートしていません。エフェクトがサポートする入力数を判別するには、ID2D1Properties::GetValue を D2D1_PROPERTY_MIN_INPUTS および D2D1_PROPERTY_MAX_INPUTS の値とともに使用します。
入力数がサポートされる最小値未満または最大値を超える場合、呼び出しは失敗します。
入力数が変わらない場合、呼び出しは S_OK で成功します。
入力数が小さくされない限り、エフェクトで現在選択されている入力はこの呼び出しによって変更されません。入力数が小さくされた場合、選択範囲を超える入力は解放されます。
メソッドが失敗した場合、既存の入力および入力数は変更されません。
指定した入力画像をインデックスで取得します。
| index | DWORD | in | 取得する画像のインデックス。 |
| input | ID2D1Image** | out | このメソッドが返るとき、Index で識別される画像へのポインターのアドレスが格納されます。 |
解説(Remarks)
入力インデックスが範囲外の場合、返される画像は NULL になります。
エフェクトへの入力数を取得します。
戻り値
Type: UINT32
このメソッドはエフェクトへの入力数を返します。
エフェクトから出力画像を取得します。
| outputImage | ID2D1Image** | out | このメソッドが返るとき、エフェクトの出力画像へのポインターのアドレスが格納されます。 |
解説(Remarks)
出力画像は別のエフェクトの入力として設定することも、エフェクトをレンダリングするために ID2D1DeviceContext に直接渡すこともできます。
また、QueryInterface を使用して同じ出力画像を取得することもできます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID2D1Effect "{28211A43-7D89-476F-8181-2D6159B220AD}"
#usecom global ID2D1Effect IID_ID2D1Effect "{}"
#comfunc global ID2D1Effect_SetInput 14 int,sptr,int
#comfunc global ID2D1Effect_SetInputCount 15 int
#comfunc global ID2D1Effect_GetInput 16 int,sptr
#comfunc global ID2D1Effect_GetInputCount 17
#comfunc global ID2D1Effect_GetOutput 18 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。