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

ID3D10Effect

COM
IID51b0ca8b-ec0b-4519-870d-8ee1cb5017c7継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ID3D10Effect インターフェイスは、レンダリングエフェクトを実装するための状態オブジェクト、リソース、シェーダーのセットを管理します。

解説(Remarks)

エフェクトは D3D10CreateEffectFromMemory を呼び出して作成します。

エフェクトシステムは、レンダリングに必要な情報をエフェクトとしてまとめます。エフェクトには次のものが含まれます。状態変更をグループ単位で割り当てるための状態オブジェクト、入力データを供給し出力データを格納するためのリソース、そしてレンダリングの方法を制御するプログラム(シェーダーと呼ばれます)です。詳細については、Effects (Direct3D 10) を参照してください。

メモ

ID3D10Effect オブジェクトに対して QueryInterface を呼び出して IUnknown インターフェイスを取得しようとすると、QueryInterfaceE_NOINTERFACE を返します。この問題を回避するには、次のコードを使用してください。

IUnknown* pIUnknown = (IUnknown*)pEffect;
    pIUnknown->AddRef();

メソッド 13

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

vtbl 3 BOOL IsValid()

エフェクトが有効な構文を含んでいるかどうかをテストします。

戻り値

型: BOOL

コードの構文が有効な場合は TRUE、それ以外の場合は FALSE

vtbl 4 BOOL IsPool()

エフェクトがメモリプールの一部であるかどうかをテストします。

戻り値

型: BOOL

エフェクトがプールされている場合は TRUE、それ以外の場合は FALSEID3D10EffectPool インターフェイス を参照してください。

vtbl 5 HRESULT GetDevice(ID3D10Device** ppDevice)

エフェクトを作成したデバイスを取得します。

ppDeviceID3D10Device**outID3D10Device インターフェイス へのポインター。

戻り値

型: HRESULT

次の Direct3D 10 リターンコード のいずれかを返します。

解説(Remarks)

エフェクトは、D3DX10CreateEffectFromFile などの関数を呼び出すことで、特定のデバイスに対して作成されます。

vtbl 6 HRESULT GetDesc(D3D10_EFFECT_DESC* pDesc)

エフェクトの記述を取得します。

pDescD3D10_EFFECT_DESC*outエフェクトの記述へのポインター(D3D10_EFFECT_DESC を参照)。

戻り値

型: HRESULT

次の Direct3D 10 リターンコード のいずれかを返します。

解説(Remarks)

エフェクトの記述には、そのエフェクトに含まれるテクニックや、必要とする定数バッファーリソースなど、エフェクトに関する基本的な情報が含まれます。

vtbl 7 ID3D10EffectConstantBuffer* GetConstantBufferByIndex(DWORD Index)

ID3D10Effect::GetConstantBufferByIndex (d3d10effect.h) メソッドは、インデックスによって定数バッファーを取得します。

IndexDWORDin0 から始まるインデックス。

戻り値

型: ID3D10EffectConstantBuffer*

ID3D10EffectConstantBuffer インターフェイス へのポインター。

解説(Remarks)

アプリケーションによって読み書きされる変数を含むエフェクトには、少なくとも 1 つの定数バッファーが必要です。パフォーマンスを最大化するには、更新頻度に基づいて変数を 1 つ以上の定数バッファーに整理する必要があります。

vtbl 8 ID3D10EffectConstantBuffer* GetConstantBufferByName(LPSTR Name)

名前によって定数バッファーを取得します。(ID3D10Effect.GetConstantBufferByName)

NameLPSTRin定数バッファーの名前。

戻り値

型: ID3D10EffectConstantBuffer*

Name で指定された定数バッファーへのポインター。ID3D10EffectConstantBuffer を参照してください。

解説(Remarks)

アプリケーションによって読み書きされる変数を含むエフェクトには、少なくとも 1 つの定数バッファーが必要です。パフォーマンスを最大化するには、更新頻度に基づいて変数を 1 つ以上の定数バッファーに整理する必要があります。

vtbl 9 ID3D10EffectVariable* GetVariableByIndex(DWORD Index)

インデックスによって変数を取得します。

IndexDWORDin0 から始まるインデックス。

戻り値

型: ID3D10EffectVariable*

ID3D10EffectVariable インターフェイス へのポインター。

解説(Remarks)

エフェクトには 1 つ以上の変数を含めることができます。テクニックの外側にある変数はすべてのエフェクトに対してグローバルとみなされ、テクニックの内側にある変数はそのテクニックに対してローカルになります。ローカルな非 static のエフェクト変数には、名前またはインデックスを使用してアクセスできます。

このメソッドは、変数が見つからない場合でも エフェクト変数インターフェイス へのポインターを返します。ID3D10Effect::IsValid を呼び出すことで、そのインデックスが存在するかどうかを確認できます。

vtbl 10 ID3D10EffectVariable* GetVariableByName(LPSTR Name)

名前によって変数を取得します。

NameLPSTRin変数の名前。

戻り値

型: ID3D10EffectVariable*

ID3D10EffectVariable インターフェイス へのポインター。

解説(Remarks)

エフェクトには 1 つ以上の変数を含めることができます。テクニックの外側にある変数はすべてのエフェクトに対してグローバルとみなされ、テクニックの内側にある変数はそのテクニックに対してローカルになります。エフェクト変数には、名前またはインデックスを使用してアクセスできます。

このメソッドは、変数が見つからない場合でも エフェクト変数インターフェイス へのポインターを返します。ID3D10Effect::IsValid を呼び出すことで、その名前が存在するかどうかを確認できます。

vtbl 11 ID3D10EffectVariable* GetVariableBySemantic(LPSTR Semantic)

セマンティックによって変数を取得します。

SemanticLPSTRinセマンティック名。

戻り値

型: ID3D10EffectVariable*

Semantic で指定されたエフェクト変数へのポインター。ID3D10EffectVariable インターフェイス を参照してください。

解説(Remarks)

各エフェクト変数には、ユーザー定義のメタデータ文字列であるセマンティックを付加できます。一部の システム値セマンティック は、パイプラインステージの組み込み機能をトリガーする予約語です。

このメソッドは、変数が見つからない場合でも エフェクト変数インターフェイス へのポインターを返します。ID3D10Effect::IsValid を呼び出すことで、そのセマンティックが存在するかどうかを確認できます。

vtbl 12 ID3D10EffectTechnique* GetTechniqueByIndex(DWORD Index)

インデックスによってテクニックを取得します。

IndexDWORDin0 から始まるインデックス。

戻り値

型: ID3D10EffectTechnique*

ID3D10EffectTechnique インターフェイス へのポインター。

解説(Remarks)

エフェクトには 1 つ以上のテクニックが含まれ、各テクニックには 1 つ以上のパスが含まれます。テクニックには、名前またはインデックスを使用してアクセスできます。 テクニックの詳細については、テクニックとパス を参照してください。

vtbl 13 ID3D10EffectTechnique* GetTechniqueByName(LPSTR Name)

名前によってテクニックを取得します。

NameLPSTRinテクニックの名前。

戻り値

型: ID3D10EffectTechnique*

ID3D10EffectTechnique インターフェイス へのポインター。テクニックが見つからない場合は NULL

解説(Remarks)

エフェクトには 1 つ以上のテクニックが含まれ、各テクニックには 1 つ以上のパスが含まれます。テクニックには、名前またはインデックスを使用してアクセスできます。テクニックの詳細については、テクニックとパス を参照してください。

vtbl 14 HRESULT Optimize()

エフェクトに必要なメモリ量を最小化します。

戻り値

型: HRESULT

次の Direct3D 10 リターンコード のいずれかを返します。

解説(Remarks)

エフェクトは、メモリ領域を 2 通りの方法で使用します。1 つはランタイムがエフェクトを実行するために必要な情報を格納するため、もう 1 つは API を使ってアプリケーションに情報を反映(リフレクション)するために必要なメタデータを格納するためです。ID3D10Effect::Optimize を呼び出すと、リフレクションメタデータをメモリから削除でき、エフェクトに必要なメモリ量を最小化できます。ただし、リフレクションデータが削除されると、変数を読み取る API メソッドは動作しなくなります。

エフェクトに対して Optimize を呼び出した後は、次のメソッドは失敗します。

ID3D10Effect::Optimize を呼び出す前にこれらのメソッドで取得した参照は、ID3D10Effect::Optimize の呼び出し後も引き続き有効であることに注意してください。これにより、アプリケーションは使用するすべての変数、テクニック、パスを取得してから Optimize を呼び出し、その後エフェクトを使用できます。
vtbl 15 BOOL IsOptimized()

エフェクトのリフレクションメタデータがメモリから削除されているかどうかをテストします。

戻り値

型: BOOL

エフェクトが最適化されている場合は TRUE、それ以外の場合は FALSE

解説(Remarks)

エフェクトは、メモリ領域を 2 通りの方法で使用します。1 つはランタイムがエフェクトを実行するために必要な情報を格納するため、もう 1 つは API を使ってアプリケーションに情報を反映(リフレクション)するために必要なメタデータを格納するためです。ID3D10Effect::Optimize を呼び出すと、リフレクションメタデータをメモリから削除でき、エフェクトに必要なメモリ量を最小化できます。もちろん、リフレクションデータが削除されると、変数を読み取る API メソッドは動作しなくなります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ID3D10Effect "{51B0CA8B-EC0B-4519-870D-8EE1CB5017C7}"
#usecom global ID3D10Effect IID_ID3D10Effect "{}"
#comfunc global ID3D10Effect_IsValid                   3
#comfunc global ID3D10Effect_IsPool                    4
#comfunc global ID3D10Effect_GetDevice                 5 sptr
#comfunc global ID3D10Effect_GetDesc                   6 var
#comfunc global ID3D10Effect_GetConstantBufferByIndex  7 int
#comfunc global ID3D10Effect_GetConstantBufferByName   8 str
#comfunc global ID3D10Effect_GetVariableByIndex        9 int
#comfunc global ID3D10Effect_GetVariableByName         10 str
#comfunc global ID3D10Effect_GetVariableBySemantic     11 str
#comfunc global ID3D10Effect_GetTechniqueByIndex       12 int
#comfunc global ID3D10Effect_GetTechniqueByName        13 str
#comfunc global ID3D10Effect_Optimize                  14
#comfunc global ID3D10Effect_IsOptimized               15
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。