ID2D1Transform
COM公式ドキュメント
トランスフォーム作成者が実装するすべてのトランスフォームの基底となるインターフェイスを表します。
解説(Remarks)
トランスフォームはエフェクト作成者によって集約されます。このインターフェイスは、Direct2D イメージング拡張機能におけるすべてのトランスフォーム処理の基礎となる Shantzis の矩形計算を実装するための共通インターフェイスを提供します。これらの計算は、論文 A model for efficient and flexible image computing で説明されています。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
トランスフォームが、自身の出力に対して要求された矩形を、入力上のサンプル矩形の集合へどのようにマッピングするかを示せるようにします。
| outputRect | RECT* | in | 入力をマッピングする元となる出力矩形。 |
| inputRects | RECT* | out | 対応する入力の集合。これらの入力はトランスフォームの各入力に直接対応します。 |
| inputRectsCount | DWORD | in | 指定された入力の数。Direct2D は、この値がトランスフォームで指定された入力の数と等しくなることを保証します。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
トランスフォームの実装は、自身が提供するピクセルシェーダーまたはソフトウェアコールバックの実装が、この計算に従うことを保証しなければなりません。
トランスフォームの実装は、このメソッドを純粋に関数的なものとして扱わなければなりません。マッピングされる入力矩形および出力矩形は、カプセル化するエフェクトのプロパティで指定される現在の状態に基づいて決定できます。ただし、このメソッドが呼び出されたことに応じて自身の状態を変更してはなりません。Direct2D レンダラーの実装は、任意のタイミングかつ任意の順序でこのメソッドを呼び出す権利を保持します。
MapOutputRectToInputRects の逆マッピングを実行します。
| inputRects | RECT* | in | 出力矩形へマッピングする入力矩形の配列。inputRects パラメーターは常に入力境界と等しくなります。 |
| inputOpaqueSubRects | RECT* | in | 不透明な出力矩形へマッピングする入力矩形の配列。 |
| inputRectCount | DWORD | in | 指定された入力の数。実装は、この値がトランスフォームで指定された入力の数と等しくなることを保証します。 |
| outputRect | RECT* | out | 対応する入力矩形にマッピングされる出力矩形。 |
| outputOpaqueSubRect | RECT* | out | 対応する不透明な入力矩形にマッピングされる出力矩形。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
トランスフォームの実装は、自身が提供するピクセルシェーダーまたはソフトウェアコールバックの実装が、この計算に従うことを保証しなければなりません。
MapOutputRectToInputRects および MapInvalidRect 関数とは異なり、このメソッドはレンダラーによってそのレンダリングアルゴリズム内の定められた箇所で明示的に呼び出されます。トランスフォームの実装は、入力矩形に基づいて自身の状態を変更し、その情報を用いてレンダリング情報を制御できます。このメソッドは、トランスフォームの MapInvalidRect メソッドおよび MapOutputRectToInputRects メソッドよりも常に前に呼び出されます。
このレンダリングパスの入力矩形をトランスフォームに設定します。
| inputIndex | DWORD | in | 入力矩形のインデックス。 |
| invalidInputRect | RECT | in | 無効な入力矩形。 |
| invalidOutputRect | RECT* | out | 入力矩形がマッピングされる先の出力矩形。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
トランスフォームの実装は、MapInvalidRect を純粋に関数的なものとして扱わなければなりません。トランスフォームの実装は、マッピングされる入力矩形を、カプセル化するエフェクトのプロパティで指定される現在の状態に基づいて決定できます。ただし、MapInvalidRect の呼び出しに応じて自身の状態を変更することはできません。Direct2D は、MapInputRectsToOutputRect メソッドの呼び出し後、任意のタイミングかつ任意の順序でこのメソッドを呼び出すことができます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID2D1Transform "{EF1A287D-342A-4F76-8FDB-DA0D6EA9F92B}" #usecom global ID2D1Transform IID_ID2D1Transform "{}" #comfunc global ID2D1Transform_MapOutputRectToInputRects 4 var,var,int #comfunc global ID2D1Transform_MapInputRectsToOutputRect 5 var,var,int,var,var #comfunc global ID2D1Transform_MapInvalidRect 6 int,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_ID2D1Transform "{EF1A287D-342A-4F76-8FDB-DA0D6EA9F92B}" #usecom global ID2D1Transform IID_ID2D1Transform "{}" #comfunc global ID2D1Transform_MapOutputRectToInputRects 4 sptr,sptr,int #comfunc global ID2D1Transform_MapInputRectsToOutputRect 5 sptr,sptr,int,sptr,sptr #comfunc global ID2D1Transform_MapInvalidRect 6 int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。