ID2D1TransformGraph
COM公式ドキュメント
変換ノードのグラフを表します。
解説(Remarks)
このインターフェイスを使用すると、変換ノードのグラフを指定できます。このインターフェイスは ID2D1EffectImpl::Initialize に渡され、エフェクトの実装が変換のグラフまたは単一の変換を指定できるようにします。
Examples
この例では、ID2D1TransformGraph の多くのメソッドをどのように使用できるかを示します。
class CMyEffect : public ID2D1EffectImpl
{
public:
IFACEMETHODIMP SetGraph(
__in ID2D1TransformGraph *pGraph
)
{
HRESULT hr = S_OK;
hr = pGraph->Clear();
if (SUCEEDED(hr))
{
hr = pGraph->AddNode(_pTransform1);
}
if (SUCCEEDED(hr))
{
hr = pGraph->AddNode(_pTransform2);
}
if (SUCCEEDED(hr))
{
hr = pGraph->SetOutputNode(_pTransform2);
}
if (SUCCEEDED(hr))
{
hr = pGraph->ConnectNode(_pTransform1, _pTransform2, 0);
}
if (SUCCEEDED(hr))
{
hr = pGraph->ConnectToEffectInput(0, _pTransform1, 0);
}
return hr;
}
private:
class CMyTransform1 : public ID2D1DrawTransform
{
// <Snip> The transform implementation, one node input</Snip>
};
class CMyTransform2 : public ID2D1DrawTransform
{
// <Snip> A second transform implementation one node input</Snip>
};
CMyTransform1 *_pTransform1;
CMyTransform2 *_pTransform2;
};
メソッド 9
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
変換グラフへの入力の数を返します。
戻り値
型: UINT32
この変換グラフへの入力の数。
単一の変換ノードをグラフ全体と等価なものとして設定します。
| node | ID2D1TransformNode* | in | 設定するノード。 |
戻り値
型: HRESULT
このメソッドは HRESULT を返します。とりうる値には、次の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
解説(Remarks)
これは、ID2D1TransformGraph::Clear を呼び出し、単一のノードを追加し、そのノードのすべての入力をエフェクトの入力に順番に接続し、その変換ノードをグラフの出力として設定するのと同等です。
Examples
class CMySimpleEffect : public ID2D1EffectImpl
{
public:
IFACEMETHODIMP SetGraph(
__in ID2D1TransformGraph *pGraph
)
{
HRESULT hr = S_OK;
CMyTransform *pTransform = new CMyTransform();
hr = pTransform ? S_OK : E_OUTOFMEMORY;
if (SUCCEEDED(hr))
{
hr = graph->SetSingleTransformNode(pTransform);
pTransform->Release();
}
return hr;
}
private:
class CMyTransform : public ID2D1DrawTransform
{
// <Snip> Implementation of transform </Snip>
};
};
指定されたノードを変換グラフに追加します。
| node | ID2D1TransformNode* | in | 変換グラフに追加されるノード。 |
戻り値
型: HRESULT
このメソッドは HRESULT を返します。とりうる値には、次の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
解説(Remarks)
これは変換ノードを変換グラフに追加します。ノードを何らかの方法で相互接続する前に、そのノードを変換グラフに追加しておく必要があります。
変換グラフを別の変換グラフに直接追加することはできません。 ID2D1TransformNode から派生したインターフェイスのみを変換グラフに追加できます。
指定されたノードを変換グラフから削除します。
| node | ID2D1TransformNode* | in | 変換グラフから削除されるノード。 |
戻り値
型: HRESULT
このメソッドは HRESULT を返します。とりうる値には、次の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) | Direct2D は指定されたノードを見つけられませんでした。 |
解説(Remarks)
ノードはグラフ内に既に存在している必要があります。そうでない場合、呼び出しは D2DERR_NOT_FOUND で失敗します。
ノードが削除されると、そのノードへのすべての接続も削除されます。
ノードが削除された後は、AddNode によってグラフに追加されるまで、そのノードをインターフェイスで使用することはできません。
変換グラフの出力ノードを設定します。
| node | ID2D1TransformNode* | in | 変換ノードの出力と見なされるノード。 |
戻り値
型: HRESULT
このメソッドは HRESULT を返します。とりうる値には、次の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) | Direct2D は指定されたノードを見つけられませんでした。 |
解説(Remarks)
ノードはグラフ内に既に存在している必要があります。そうでない場合、呼び出しは D2DERR_NOT_FOUND で失敗します。
変換グラフ内の 2 つのノードを接続します。
| fromNode | ID2D1TransformNode* | in | 接続元となるノード。 |
| toNode | ID2D1TransformNode* | in | 接続先となるノード。 |
| toNodeInputIndex | DWORD | in | 接続されるノード入力。 |
戻り値
型: HRESULT
このメソッドは HRESULT を返します。とりうる値には、次の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) | Direct2D は指定されたノードを見つけられませんでした。 |
解説(Remarks)
両方のノードがグラフ内に既に存在している必要があります。そうでない場合、呼び出しは D2DERR_NOT_FOUND で失敗します。
グラフ内の変換ノードを、それを内包するエフェクトの対応するエフェクト入力に接続します。
| toEffectInputIndex | DWORD | in | 変換ノードがバインドされるエフェクト入力。 |
| node | ID2D1TransformNode* | in | 接続先となるノード。 |
| toNodeInputIndex | DWORD | in | 接続されるノード入力。 |
戻り値
型: HRESULT
このメソッドは HRESULT を返します。とりうる値には、次の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) | Direct2D は指定されたノードを見つけられませんでした。 |
変換グラフから変換ノードとすべての接続をクリアします。
解説(Remarks)
変換に対する変更が多く、変換グラフの編集が非効率になる場合に使用します。
指定された入力をエフェクトの出力として使用します。
| effectInputIndex | DWORD | in | エフェクトへの入力のインデックス。 |
戻り値
このメソッドは HRESULT を返します。とりうる値には、次の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) | Direct2D は指定されたノードを見つけられませんでした。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID2D1TransformGraph "{13D29038-C3E6-4034-9081-13B53A417992}"
#usecom global ID2D1TransformGraph IID_ID2D1TransformGraph "{}"
#comfunc global ID2D1TransformGraph_GetInputCount 3
#comfunc global ID2D1TransformGraph_SetSingleTransformNode 4 sptr
#comfunc global ID2D1TransformGraph_AddNode 5 sptr
#comfunc global ID2D1TransformGraph_RemoveNode 6 sptr
#comfunc global ID2D1TransformGraph_SetOutputNode 7 sptr
#comfunc global ID2D1TransformGraph_ConnectNode 8 sptr,sptr,int
#comfunc global ID2D1TransformGraph_ConnectToEffectInput 9 int,sptr,int
#comfunc global ID2D1TransformGraph_Clear 10
#comfunc global ID2D1TransformGraph_SetPassthroughGraph 11 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。