ID2D1DrawInfo
COM公式ドキュメント
このインターフェイスは、頂点シェーダーまたはピクセルシェーダーでの GPU レンダリングパスを記述するために使用されます。ID2D1DrawTransform に渡されます。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
このトランスフォームのピクセルシェーダー用の定数バッファを設定します。
| buffer | BYTE* | in | 定数バッファに適用するデータ。 |
| bufferCount | DWORD | in | 定数バッファ内のデータのバイト数。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定されたシェーダーテクスチャインデックスに対応するリソーステクスチャを設定します。
| textureIndex | DWORD | in | ピクセルシェーダーにバインドするテクスチャのインデックス。 |
| resourceTexture | ID2D1ResourceTexture* | in | 作成されたリソーステクスチャ。 |
戻り値
Type: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
このトランスフォームの頂点シェーダー用の定数バッファを設定します。
| buffer | BYTE* | in | 定数バッファに適用するデータ。 |
| bufferCount | DWORD | in | 定数バッファ内のデータのバイト数。 |
戻り値
Type: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
このトランスフォームのシェーダー命令を設定します。
| shaderId | GUID* | in | シェーダーのリソース ID。 |
| pixelOptions | D2D1_PIXEL_OPTIONS | in | ピクセルシェーダーが行う操作を示すために、レンダラーに提供される追加情報。 |
戻り値
Type: HRESULT
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
この呼び出しが失敗した場合、対応する ID2D1Effect インスタンスはエラー状態になり、Draw に失敗します。さらにコンテキストをエラー状態にし、その状態は ID2D1DeviceContext::EndDraw の呼び出しを通じて取得できます。
D2D1_PIXEL_OPTIONS_NONE 以外の pixelOptions を指定すると、エフェクトグラフのさまざまな部分を結合するなど、レンダラーが特定の最適化を実行できるようになります。この情報がシェーダーを正確に記述していない場合、不定なレンダリングアーティファクトが発生する可能性があります。
頂点バッファ、対応する頂点シェーダー、および Direct2D コンテキストが頂点をどのように扱うかを制御するオプションを設定します。
| vertexBuffer | ID2D1VertexBuffer* | inoptional | 頂点バッファ。これがクリアされている場合、既定の頂点シェーダーとトランスフォーム矩形へのマッピングが使用されます。 |
| vertexOptions | D2D1_VERTEX_OPTIONS | in | レンダラーが頂点シェーダーとどのように連携するかに影響するオプション。 |
| blendDescription | D2D1_BLEND_DESCRIPTION* | inoptional | 頂点を出力テクスチャとどのようにブレンドするか。 |
| vertexRange | D2D1_VERTEX_RANGE* | inoptional | バッファから使用する頂点の集合。 |
| vertexShader | GUID* | 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 公式リファレンス: 英語 (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 指定が可能。#define global IID_ID2D1DrawInfo "{693CE632-7F2F-45DE-93FE-18D88B37AA21}" #usecom global ID2D1DrawInfo IID_ID2D1DrawInfo "{}" #comfunc global ID2D1DrawInfo_SetPixelShaderConstantBuffer 7 sptr,int #comfunc global ID2D1DrawInfo_SetResourceTexture 8 int,sptr #comfunc global ID2D1DrawInfo_SetVertexShaderConstantBuffer 9 sptr,int #comfunc global ID2D1DrawInfo_SetPixelShader 10 sptr,int #comfunc global ID2D1DrawInfo_SetVertexProcessing 11 sptr,int,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。