ID2D1Factory1
COM公式ドキュメント
Direct2D リソースを作成します。(ID2D1Factory1)
解説(Remarks)
ID2D1Factory1 インターフェイスは、デバイスの作成、エフェクトの登録および登録解除、エフェクトのプロパティの列挙に使用します。エフェクトはグローバルに登録および登録解除されます。登録用の API は、利便性のためにこのインターフェイスに配置されています。
メソッド 10
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ID2D1Device オブジェクトを作成します。
| dxgiDevice | IDXGIDevice* | in | ID2D1Device の作成時に使用する IDXGIDevice オブジェクトです。 |
| d2dDevice | ID2D1Device** | out | 要求された ID2D1Device オブジェクトです。 |
戻り値
型: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 戻り値を返す関数に無効なパラメーターが渡されました。 |
| D3DERR_OUTOFVIDEOMEMORY | Direct3D に、この操作を実行するのに十分な表示メモリがありません。 |
解説(Remarks)
Direct2D デバイスは、一連の Direct2D オブジェクトと Direct2D デバイスコンテキストを一緒に使用できるリソースドメインを定義します。CreateDevice を呼び出すたびに、同じ IDXGIDevice を複数回渡した場合でも、一意の ID2D1Device オブジェクトが返されます。
| strokeStyleProperties | D2D1_STROKE_STYLE_PROPERTIES1* | in | 線端・継ぎ目・破線・変換種別などの拡張ストローク属性へのポインタ。 |
| dashes | FLOAT* | inoptional | 破線パターンの各長さを指定するFLOAT配列。NULL可。 |
| dashesCount | DWORD | in | dashes配列の要素数。0で実線となる。 |
| strokeStyle | ID2D1StrokeStyle1** | out | 作成された拡張ストロークスタイルを受け取る出力ポインタ。 |
ID2D1PathGeometry1 オブジェクトを作成します。
| pathGeometry | ID2D1PathGeometry1** | out | このメソッドが返るとき、新しく作成されたパスジオメトリへのポインターのアドレスが格納されます。 |
戻り値
型: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| drawingStateDescription | D2D1_DRAWING_STATE_DESCRIPTION1* | inoptional | 初期の拡張描画状態を指定する記述子。NULL可で既定値。 |
| textRenderingParams | IDWriteRenderingParams* | inoptional | 初期テキストレンダリングパラメータ。NULL可。 |
| drawingStateBlock | ID2D1DrawingStateBlock1** | out | 作成された拡張描画状態ブロックを受け取る出力ポインタ。 |
メタファイルの内容を再生するために使用できる、新しい ID2D1GdiMetafile オブジェクトを作成します。
| metafileStream | IStream* | in | メタファイルデータを保持するストリームオブジェクトです。 |
| metafile | ID2D1GdiMetafile** | out | 新しく作成された GDI メタファイルオブジェクトのアドレスです。 |
戻り値
型: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | メソッドに無効な値が渡されました。 |
プロパティ XML をストリームとして指定して、ファクトリインスタンス内にエフェクトを登録します。
| classId | GUID* | in | 登録するエフェクトの識別子です。 |
| propertyXml | IStream* | in | エフェクトのプロパティ、型、およびメタデータの一覧です。 |
| bindings | D2D1_PROPERTY_BINDING* | inoptional | プロパティとメソッドの配列です。 これは、プロパティを名前によって、そのプロパティを処理するためにエフェクトの作成者が実装した特定のメソッドにバインドします。 名前は、対応する propertyXml 内に存在している必要があります。 |
| bindingsCount | DWORD | in | バインディング配列内のバインディングの数です。 |
| effectFactory | PD2D1_EFFECT_FACTORY | in | 対応するエフェクトの作成に使用される静的ファクトリです。 |
戻り値
型: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 戻り値を返す関数に無効なパラメーターが渡されました。 |
解説(Remarks)
Direct2D エフェクトは、登録時に登録 XML を介してそのプロパティを定義する必要があります。エフェクトは、いくつかの必須システムプロパティを宣言し、 カスタムプロパティを宣言することもできます。propertyXml パラメーターの書式設定の詳細については、カスタムエフェクト を参照してください。
RegisterEffect はアトミックであり、参照カウントされます。エフェクトの登録を解除するには、 エフェクトの classId を指定して UnregisterEffect を呼び出します。
プロパティ XML を文字列として指定して、ファクトリインスタンス内にエフェクトを登録します。
| classId | GUID* | in | 登録するエフェクトの識別子です。 |
| propertyXml | LPWSTR | in | エフェクトのプロパティ、型、およびメタデータの一覧です。 |
| bindings | D2D1_PROPERTY_BINDING* | inoptional | プロパティとメソッドの配列です。 これは、プロパティを名前によって、そのプロパティを処理するためにエフェクトの作成者が実装した特定のメソッドにバインドします。 名前は、対応する propertyXml 内に存在している必要があります。 |
| bindingsCount | DWORD | in | バインディング配列内のバインディングの数です。 |
| effectFactory | PD2D1_EFFECT_FACTORY | in | 対応するエフェクトの作成に使用される静的ファクトリです。 |
戻り値
型: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 戻り値を返す関数に無効なパラメーターが渡されました。 |
解説(Remarks)
Direct2D エフェクトは、登録時に登録 XML を介してそのプロパティを定義する必要があります。エフェクトは、いくつかの必須システムプロパティを宣言し、 カスタムプロパティを宣言することもできます。propertyXml パラメーターの書式設定の詳細については、カスタムエフェクト を参照してください。
RegisterEffect はアトミックであり、参照カウントされます。エフェクトの登録を解除するには、 エフェクトの classId を指定して UnregisterEffect を呼び出します。
指定された classId に対応するエフェクトを、ファクトリインスタンス内で登録解除します。
| classId | GUID* | in | 登録解除するエフェクトの識別子です。 |
戻り値
型: HRESULT
エフェクトが登録されていない場合は D2DERR_EFFECT_IS_NOT_REGISTERED、それ以外の場合は S_OK。
解説(Remarks)
エフェクトを完全にアンロードするには、そのエフェクトを登録した回数と同じ回数だけ UnregisterEffect を呼び出す必要があります。
UnregisterEffect メソッドは、同じファクトリに登録されたエフェクトのみを登録解除します。組み込みエフェクトの登録解除には使用できません。
このファクトリで現在登録されているエフェクトおよびグローバルエフェクトのクラス ID を返します。
| effects | GUID* | outoptional | このメソッドが返るとき、エフェクトの配列が格納されます。エフェクトが取得されなかった場合は NULL です。 |
| effectsCount | DWORD | in | effects 配列の容量です。 |
| effectsReturned | DWORD* | outoptional | このメソッドが返るとき、effects にコピーされたエフェクトの数が格納されます。 |
| effectsRegistered | DWORD* | outoptional | このメソッドが返るとき、システムに現在登録されているエフェクトの数が格納されます。 |
戻り値
型: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) | effectsRegistered が effectCount より大きいです。 |
解説(Remarks)
クラス ID のセットは、この API によってアトミックに返されます。このセットは、エフェクトを登録または登録解除する他のスレッドによって中断されることはありません。
effectsRegistered が effectCount より大きい場合でも、指定された配列は現在登録されているエフェクトのセットで容量いっぱいまで満たされます。このメソッドは、すべてのグローバルエフェクトと、このファクトリに登録されたすべてのエフェクトの CLSID を返します。
エフェクトのプロパティを取得します。
| effectId | GUID* | in | プロパティを取得する対象のエフェクトの ID です。 |
| properties | ID2D1Properties** | out | このメソッドが返るとき、エフェクトのメタデータを照会するために使用できるプロパティインターフェイスへのポインターのアドレスが格納されます。 |
戻り値
型: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| D2DERR_EFFECT_IS_NOT_REGISTERED | 要求されたエフェクトが見つかりませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
解説(Remarks)
返されるエフェクトプロパティでは、そのエフェクトのすべての可変プロパティが既定値である NULL または空の値に設定されます。
- 値型はゼロで埋められます。
- blob 型および文字列型は長さ 0 になります。
- 配列型は長さ 1 になり、配列の要素は前述の規則に従います。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID2D1Factory1 "{BB12D362-DAEE-4B9A-AA1D-14BA401CFA1F}" #usecom global ID2D1Factory1 IID_ID2D1Factory1 "{}" #comfunc global ID2D1Factory1_CreateDevice 17 sptr,sptr #comfunc global ID2D1Factory1_CreateStrokeStyle 18 var,var,int,sptr #comfunc global ID2D1Factory1_CreatePathGeometry 19 sptr #comfunc global ID2D1Factory1_CreateDrawingStateBlock 20 var,sptr,sptr #comfunc global ID2D1Factory1_CreateGdiMetafile 21 sptr,sptr #comfunc global ID2D1Factory1_RegisterEffectFromStream 22 var,sptr,var,int,sptr #comfunc global ID2D1Factory1_RegisterEffectFromString 23 var,wstr,var,int,sptr #comfunc global ID2D1Factory1_UnregisterEffect 24 var #comfunc global ID2D1Factory1_GetRegisteredEffects 25 var,int,var,var #comfunc global ID2D1Factory1_GetEffectProperties 26 var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ID2D1Factory1 "{BB12D362-DAEE-4B9A-AA1D-14BA401CFA1F}" #usecom global ID2D1Factory1 IID_ID2D1Factory1 "{}" #comfunc global ID2D1Factory1_CreateDevice 17 sptr,sptr #comfunc global ID2D1Factory1_CreateStrokeStyle 18 sptr,sptr,int,sptr #comfunc global ID2D1Factory1_CreatePathGeometry 19 sptr #comfunc global ID2D1Factory1_CreateDrawingStateBlock 20 sptr,sptr,sptr #comfunc global ID2D1Factory1_CreateGdiMetafile 21 sptr,sptr #comfunc global ID2D1Factory1_RegisterEffectFromStream 22 sptr,sptr,sptr,int,sptr #comfunc global ID2D1Factory1_RegisterEffectFromString 23 sptr,wstr,sptr,int,sptr #comfunc global ID2D1Factory1_UnregisterEffect 24 sptr #comfunc global ID2D1Factory1_GetRegisteredEffects 25 sptr,int,sptr,sptr #comfunc global ID2D1Factory1_GetEffectProperties 26 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。