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

ID2D1DrawInfo

COM
IID693ce632-7f2f-45de-93fe-18d88b37aa21継承元ID2D1RenderInfo自前メソッド開始 vtbl7

公式ドキュメント

このインターフェイスは、頂点シェーダーまたはピクセルシェーダーでの GPU レンダリングパスを記述するために使用されます。ID2D1DrawTransform に渡されます。

メソッド 5

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 7 HRESULT SetPixelShaderConstantBuffer(BYTE* buffer, DWORD bufferCount)

このトランスフォームのピクセルシェーダー用の定数バッファを設定します。

bufferBYTE*in定数バッファに適用するデータ。
bufferCountDWORDin定数バッファ内のデータのバイト数。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 8 HRESULT SetResourceTexture(DWORD textureIndex, ID2D1ResourceTexture* resourceTexture)

指定されたシェーダーテクスチャインデックスに対応するリソーステクスチャを設定します。

textureIndexDWORDinピクセルシェーダーにバインドするテクスチャのインデックス。
resourceTextureID2D1ResourceTexture*in作成されたリソーステクスチャ。

戻り値

Type: HRESULT

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

vtbl 9 HRESULT SetVertexShaderConstantBuffer(BYTE* buffer, DWORD bufferCount)

このトランスフォームの頂点シェーダー用の定数バッファを設定します。

bufferBYTE*in定数バッファに適用するデータ。
bufferCountDWORDin定数バッファ内のデータのバイト数。

戻り値

Type: HRESULT

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

vtbl 10 HRESULT SetPixelShader(GUID* shaderId, D2D1_PIXEL_OPTIONS pixelOptions)

このトランスフォームのシェーダー命令を設定します。

shaderIdGUID*inシェーダーのリソース ID。
pixelOptionsD2D1_PIXEL_OPTIONSinピクセルシェーダーが行う操作を示すために、レンダラーに提供される追加情報。

戻り値

Type: HRESULT

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

解説(Remarks)

この呼び出しが失敗した場合、対応する ID2D1Effect インスタンスはエラー状態になり、Draw に失敗します。さらにコンテキストをエラー状態にし、その状態は ID2D1DeviceContext::EndDraw の呼び出しを通じて取得できます。

D2D1_PIXEL_OPTIONS_NONE 以外の pixelOptions を指定すると、エフェクトグラフのさまざまな部分を結合するなど、レンダラーが特定の最適化を実行できるようになります。この情報がシェーダーを正確に記述していない場合、不定なレンダリングアーティファクトが発生する可能性があります。

vtbl 11 HRESULT SetVertexProcessing(ID2D1VertexBuffer* vertexBuffer, D2D1_VERTEX_OPTIONS vertexOptions, D2D1_BLEND_DESCRIPTION* blendDescription, D2D1_VERTEX_RANGE* vertexRange, GUID* vertexShader)

頂点バッファ、対応する頂点シェーダー、および Direct2D コンテキストが頂点をどのように扱うかを制御するオプションを設定します。

vertexBufferID2D1VertexBuffer*inoptional頂点バッファ。これがクリアされている場合、既定の頂点シェーダーとトランスフォーム矩形へのマッピングが使用されます。
vertexOptionsD2D1_VERTEX_OPTIONSinレンダラーが頂点シェーダーとどのように連携するかに影響するオプション。
blendDescriptionD2D1_BLEND_DESCRIPTION*inoptional頂点を出力テクスチャとどのようにブレンドするか。
vertexRangeD2D1_VERTEX_RANGE*inoptionalバッファから使用する頂点の集合。
vertexShaderGUID*inoptional頂点シェーダーの GUID。

戻り値

Type: HRESULT

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

解説(Remarks)

頂点シェーダー GUID を通じて頂点バッファに関連付けられる頂点シェーダーは、この呼び出しを行う前に ID2D1EffectContext::LoadVertexShader メソッドを使用して読み込まれている必要があります。

頂点オプション D2D1_VERTEX_OPTIONS_DO_NOT_CLEAR を渡す場合、ブレンドの記述が次のものと完全に一致していなければ、このメソッドは失敗します。

D2D1_BLEND_DESCRIPTION blendDesc = 
        {
            D2D1_BLEND_ONE,
            D2D1_BLEND_ZERO,
            D2D1_BLEND_OPERATION_ADD,

            D2D1_BLEND_ONE,
            D2D1_BLEND_ZERO,
            D2D1_BLEND_OPERATION_ADD,

            { 1.0f, 1.0f, 1.0f, 1.0f }
        };

この呼び出しが失敗した場合、対応する ID2D1Effect インスタンスはエラー状態になり、描画に失敗します。

blendDescription が NULL の場合、foreground-over ブレンドモードが使用されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ID2D1DrawInfo "{693CE632-7F2F-45DE-93FE-18D88B37AA21}"
#usecom global ID2D1DrawInfo IID_ID2D1DrawInfo "{}"
#comfunc global ID2D1DrawInfo_SetPixelShaderConstantBuffer   7 var,int
#comfunc global ID2D1DrawInfo_SetResourceTexture             8 int,sptr
#comfunc global ID2D1DrawInfo_SetVertexShaderConstantBuffer  9 var,int
#comfunc global ID2D1DrawInfo_SetPixelShader                 10 var,int
#comfunc global ID2D1DrawInfo_SetVertexProcessing            11 sptr,int,var,var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。