Win32 API 日本語リファレンス
ホームGraphics.Direct2D › ID2D1TransformGraph

ID2D1TransformGraph

COM
IID13d29038-c3e6-4034-9081-13b53a417992継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

変換ノードのグラフを表します。

解説(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。

vtbl 3 DWORD GetInputCount()

変換グラフへの入力の数を返します。

戻り値

型: UINT32

この変換グラフへの入力の数。

vtbl 4 HRESULT SetSingleTransformNode(ID2D1TransformNode* node)

単一の変換ノードをグラフ全体と等価なものとして設定します。

nodeID2D1TransformNode*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> 
    };

    
};
vtbl 5 HRESULT AddNode(ID2D1TransformNode* node)

指定されたノードを変換グラフに追加します。

nodeID2D1TransformNode*in変換グラフに追加されるノード。

戻り値

型: HRESULT

このメソッドは HRESULT を返します。とりうる値には、次の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。

解説(Remarks)

これは変換ノードを変換グラフに追加します。ノードを何らかの方法で相互接続する前に、そのノードを変換グラフに追加しておく必要があります。

変換グラフを別の変換グラフに直接追加することはできません。 ID2D1TransformNode から派生したインターフェイスのみを変換グラフに追加できます。

vtbl 6 HRESULT RemoveNode(ID2D1TransformNode* node)

指定されたノードを変換グラフから削除します。

nodeID2D1TransformNode*in変換グラフから削除されるノード。

戻り値

型: HRESULT

このメソッドは HRESULT を返します。とりうる値には、次の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) Direct2D は指定されたノードを見つけられませんでした。

解説(Remarks)

ノードはグラフ内に既に存在している必要があります。そうでない場合、呼び出しは D2DERR_NOT_FOUND で失敗します。

ノードが削除されると、そのノードへのすべての接続も削除されます。

ノードが削除された後は、AddNode によってグラフに追加されるまで、そのノードをインターフェイスで使用することはできません。

vtbl 7 HRESULT SetOutputNode(ID2D1TransformNode* node)

変換グラフの出力ノードを設定します。

nodeID2D1TransformNode*in変換ノードの出力と見なされるノード。

戻り値

型: HRESULT

このメソッドは HRESULT を返します。とりうる値には、次の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) Direct2D は指定されたノードを見つけられませんでした。

解説(Remarks)

ノードはグラフ内に既に存在している必要があります。そうでない場合、呼び出しは D2DERR_NOT_FOUND で失敗します。

vtbl 8 HRESULT ConnectNode(ID2D1TransformNode* fromNode, ID2D1TransformNode* toNode, DWORD toNodeInputIndex)

変換グラフ内の 2 つのノードを接続します。

fromNodeID2D1TransformNode*in接続元となるノード。
toNodeID2D1TransformNode*in接続先となるノード。
toNodeInputIndexDWORDin接続されるノード入力。

戻り値

型: HRESULT

このメソッドは HRESULT を返します。とりうる値には、次の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) Direct2D は指定されたノードを見つけられませんでした。

解説(Remarks)

両方のノードがグラフ内に既に存在している必要があります。そうでない場合、呼び出しは D2DERR_NOT_FOUND で失敗します。

vtbl 9 HRESULT ConnectToEffectInput(DWORD toEffectInputIndex, ID2D1TransformNode* node, DWORD toNodeInputIndex)

グラフ内の変換ノードを、それを内包するエフェクトの対応するエフェクト入力に接続します。

toEffectInputIndexDWORDin変換ノードがバインドされるエフェクト入力。
nodeID2D1TransformNode*in接続先となるノード。
toNodeInputIndexDWORDin接続されるノード入力。

戻り値

型: HRESULT

このメソッドは HRESULT を返します。とりうる値には、次の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) Direct2D は指定されたノードを見つけられませんでした。
vtbl 10 void Clear()

変換グラフから変換ノードとすべての接続をクリアします。

解説(Remarks)

変換に対する変更が多く、変換グラフの編集が非効率になる場合に使用します。

vtbl 11 HRESULT SetPassthroughGraph(DWORD effectInputIndex)

指定された入力をエフェクトの出力として使用します。

effectInputIndexDWORDinエフェクトへの入力のインデックス。

戻り値

このメソッドは HRESULT を返します。とりうる値には、次の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) Direct2D は指定されたノードを見つけられませんでした。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。