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

ID2D1Factory1

COM
IIDbb12d362-daee-4b9a-aa1d-14ba401cfa1f継承元ID2D1Factory自前メソッド開始 vtbl17

公式ドキュメント

Direct2D リソースを作成します。(ID2D1Factory1)

解説(Remarks)

ID2D1Factory1 インターフェイスは、デバイスの作成、エフェクトの登録および登録解除、エフェクトのプロパティの列挙に使用します。エフェクトはグローバルに登録および登録解除されます。登録用の API は、利便性のためにこのインターフェイスに配置されています。

メソッド 10

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

vtbl 17 HRESULT CreateDevice(IDXGIDevice* dxgiDevice, ID2D1Device** d2dDevice)

ID2D1Device オブジェクトを作成します。

dxgiDeviceIDXGIDevice*inID2D1Device の作成時に使用する IDXGIDevice オブジェクトです。
d2dDeviceID2D1Device**out要求された ID2D1Device オブジェクトです。

戻り値

型: HRESULT

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

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG 戻り値を返す関数に無効なパラメーターが渡されました。
D3DERR_OUTOFVIDEOMEMORY Direct3D に、この操作を実行するのに十分な表示メモリがありません。

解説(Remarks)

Direct2D デバイスは、一連の Direct2D オブジェクトと Direct2D デバイスコンテキストを一緒に使用できるリソースドメインを定義します。CreateDevice を呼び出すたびに、同じ IDXGIDevice を複数回渡した場合でも、一意の ID2D1Device オブジェクトが返されます。

vtbl 18 HRESULT CreateStrokeStyle(D2D1_STROKE_STYLE_PROPERTIES1* strokeStyleProperties, FLOAT* dashes, DWORD dashesCount, ID2D1StrokeStyle1** strokeStyle)
strokeStylePropertiesD2D1_STROKE_STYLE_PROPERTIES1*in線端・継ぎ目・破線・変換種別などの拡張ストローク属性へのポインタ。
dashesFLOAT*inoptional破線パターンの各長さを指定するFLOAT配列。NULL可。
dashesCountDWORDindashes配列の要素数。0で実線となる。
strokeStyleID2D1StrokeStyle1**out作成された拡張ストロークスタイルを受け取る出力ポインタ。
vtbl 19 HRESULT CreatePathGeometry(ID2D1PathGeometry1** pathGeometry)

ID2D1PathGeometry1 オブジェクトを作成します。

pathGeometryID2D1PathGeometry1**outこのメソッドが返るとき、新しく作成されたパスジオメトリへのポインターのアドレスが格納されます。

戻り値

型: HRESULT

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

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
vtbl 20 HRESULT CreateDrawingStateBlock(D2D1_DRAWING_STATE_DESCRIPTION1* drawingStateDescription, IDWriteRenderingParams* textRenderingParams, ID2D1DrawingStateBlock1** drawingStateBlock)
drawingStateDescriptionD2D1_DRAWING_STATE_DESCRIPTION1*inoptional初期の拡張描画状態を指定する記述子。NULL可で既定値。
textRenderingParamsIDWriteRenderingParams*inoptional初期テキストレンダリングパラメータ。NULL可。
drawingStateBlockID2D1DrawingStateBlock1**out作成された拡張描画状態ブロックを受け取る出力ポインタ。
vtbl 21 HRESULT CreateGdiMetafile(IStream* metafileStream, ID2D1GdiMetafile** metafile)

メタファイルの内容を再生するために使用できる、新しい ID2D1GdiMetafile オブジェクトを作成します。

metafileStreamIStream*inメタファイルデータを保持するストリームオブジェクトです。
metafileID2D1GdiMetafile**out新しく作成された GDI メタファイルオブジェクトのアドレスです。

戻り値

型: HRESULT

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

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG メソッドに無効な値が渡されました。
vtbl 22 HRESULT RegisterEffectFromStream(GUID* classId, IStream* propertyXml, D2D1_PROPERTY_BINDING* bindings, DWORD bindingsCount, PD2D1_EFFECT_FACTORY effectFactory)

プロパティ XML をストリームとして指定して、ファクトリインスタンス内にエフェクトを登録します。

classIdGUID*in登録するエフェクトの識別子です。
propertyXmlIStream*inエフェクトのプロパティ、型、およびメタデータの一覧です。
bindingsD2D1_PROPERTY_BINDING*inoptional

プロパティとメソッドの配列です。

これは、プロパティを名前によって、そのプロパティを処理するためにエフェクトの作成者が実装した特定のメソッドにバインドします。 名前は、対応する propertyXml 内に存在している必要があります。

bindingsCountDWORDinバインディング配列内のバインディングの数です。
effectFactoryPD2D1_EFFECT_FACTORYin対応するエフェクトの作成に使用される静的ファクトリです。

戻り値

型: HRESULT

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

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG 戻り値を返す関数に無効なパラメーターが渡されました。

解説(Remarks)

Direct2D エフェクトは、登録時に登録 XML を介してそのプロパティを定義する必要があります。エフェクトは、いくつかの必須システムプロパティを宣言し、 カスタムプロパティを宣言することもできます。propertyXml パラメーターの書式設定の詳細については、カスタムエフェクト を参照してください。

RegisterEffect はアトミックであり、参照カウントされます。エフェクトの登録を解除するには、 エフェクトの classId を指定して UnregisterEffect を呼び出します。

重要 RegisterEffect は、エフェクトが含まれる DLL または実行可能ファイルへの 参照を保持しません。アプリケーションは、DLL または実行可能ファイルの有効期間が、登録および作成された各エフェクトのすべてのインスタンスを完全に包含するよう、独自に保証する必要があります。
グローバルに登録される 組み込みエフェクト を除き、この API はこのファクトリ、そこから派生したデバイス、 およびデバイスコンテキストのインターフェイスに対してのみエフェクトを登録します。
vtbl 23 HRESULT RegisterEffectFromString(GUID* classId, LPWSTR propertyXml, D2D1_PROPERTY_BINDING* bindings, DWORD bindingsCount, PD2D1_EFFECT_FACTORY effectFactory)

プロパティ XML を文字列として指定して、ファクトリインスタンス内にエフェクトを登録します。

classIdGUID*in登録するエフェクトの識別子です。
propertyXmlLPWSTRinエフェクトのプロパティ、型、およびメタデータの一覧です。
bindingsD2D1_PROPERTY_BINDING*inoptional

プロパティとメソッドの配列です。

これは、プロパティを名前によって、そのプロパティを処理するためにエフェクトの作成者が実装した特定のメソッドにバインドします。 名前は、対応する propertyXml 内に存在している必要があります。

bindingsCountDWORDinバインディング配列内のバインディングの数です。
effectFactoryPD2D1_EFFECT_FACTORYin対応するエフェクトの作成に使用される静的ファクトリです。

戻り値

型: HRESULT

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

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG 戻り値を返す関数に無効なパラメーターが渡されました。

解説(Remarks)

Direct2D エフェクトは、登録時に登録 XML を介してそのプロパティを定義する必要があります。エフェクトは、いくつかの必須システムプロパティを宣言し、 カスタムプロパティを宣言することもできます。propertyXml パラメーターの書式設定の詳細については、カスタムエフェクト を参照してください。

RegisterEffect はアトミックであり、参照カウントされます。エフェクトの登録を解除するには、 エフェクトの classId を指定して UnregisterEffect を呼び出します。

重要 RegisterEffect は、エフェクトが含まれる DLL または実行可能ファイルへの 参照を保持しません。アプリケーションは、DLL または実行可能ファイルの有効期間が、登録および作成された各エフェクトのすべてのインスタンスを完全に包含するよう、独自に保証する必要があります。
グローバルに登録される 組み込みエフェクト を除き、この API は このファクトリ、そこから派生したデバイスおよびデバイスコンテキストのインターフェイスに対してのみエフェクトを登録します。
vtbl 24 HRESULT UnregisterEffect(GUID* classId)

指定された classId に対応するエフェクトを、ファクトリインスタンス内で登録解除します。

classIdGUID*in登録解除するエフェクトの識別子です。

戻り値

型: HRESULT

エフェクトが登録されていない場合は D2DERR_EFFECT_IS_NOT_REGISTERED、それ以外の場合は S_OK

解説(Remarks)

エフェクトを完全にアンロードするには、そのエフェクトを登録した回数と同じ回数だけ UnregisterEffect を呼び出す必要があります。

UnregisterEffect メソッドは、同じファクトリに登録されたエフェクトのみを登録解除します。組み込みエフェクトの登録解除には使用できません。

vtbl 25 HRESULT GetRegisteredEffects(GUID* effects, DWORD effectsCount, DWORD* effectsReturned, DWORD* effectsRegistered)

このファクトリで現在登録されているエフェクトおよびグローバルエフェクトのクラス ID を返します。

effectsGUID*outoptionalこのメソッドが返るとき、エフェクトの配列が格納されます。エフェクトが取得されなかった場合は NULL です。
effectsCountDWORDineffects 配列の容量です。
effectsReturnedDWORD*outoptionalこのメソッドが返るとき、effects にコピーされたエフェクトの数が格納されます。
effectsRegisteredDWORD*outoptionalこのメソッドが返るとき、システムに現在登録されているエフェクトの数が格納されます。

戻り値

型: HRESULT

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

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

解説(Remarks)

クラス ID のセットは、この API によってアトミックに返されます。このセットは、エフェクトを登録または登録解除する他のスレッドによって中断されることはありません。

effectsRegisteredeffectCount より大きい場合でも、指定された配列は現在登録されているエフェクトのセットで容量いっぱいまで満たされます。このメソッドは、すべてのグローバルエフェクトと、このファクトリに登録されたすべてのエフェクトの CLSID を返します。

vtbl 26 HRESULT GetEffectProperties(GUID* effectId, ID2D1Properties** properties)

エフェクトのプロパティを取得します。

effectIdGUID*inプロパティを取得する対象のエフェクトの ID です。
propertiesID2D1Properties**outこのメソッドが返るとき、エフェクトのメタデータを照会するために使用できるプロパティインターフェイスへのポインターのアドレスが格納されます。

戻り値

型: HRESULT

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

HRESULT 説明
S_OK エラーは発生しませんでした。
D2DERR_EFFECT_IS_NOT_REGISTERED 要求されたエフェクトが見つかりませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。

解説(Remarks)

返されるエフェクトプロパティでは、そのエフェクトのすべての可変プロパティが既定値である NULL または空の値に設定されます。

このメソッドは、ID2D1DeviceContext::CreateEffect から参照できないエフェクトのプロパティを返すためには使用できません。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。