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

IDXGIFactory1

COM
IID770aae78-f26f-4dba-a829-253c83d1b387継承元IDXGIFactory自前メソッド開始 vtbl12

公式ドキュメント

IDXGIFactory1 インターフェイスは、DXGI オブジェクトを生成するためのメソッドを実装します。

解説(Remarks)

このインターフェイスは、Windows Vista および Windows Server 2008 に同梱された DXGI 1.0 ではサポートされていません。DXGI 1.1 のサポートが必要であり、これは Windows 7、Windows Server 2008 R2、および Windows Vista with Service Pack 2 (SP2) への更新プログラム (KB 971644) と Windows Server 2008 (KB 971512) で利用できます。

ファクトリを作成するには、CreateDXGIFactory1 関数を呼び出します。

スワップチェーンを作成せずに Direct3D デバイスを作成できるため、スワップチェーンを作成する際には、デバイスの作成に使用されたファクトリを取得する必要がある場合があります。 Direct3D デバイスから IDXGIDevice または IDXGIDevice1 インターフェイスを要求し、次に IDXGIObject::GetParent メソッドを使用して ファクトリを見つけることができます。次のコードにその方法を示します。

IDXGIDevice1 * pDXGIDevice;
hr = g_pd3dDevice->QueryInterface(__uuidof(IDXGIDevice1), (void **)&pDXGIDevice);
      
IDXGIAdapter * pDXGIAdapter;
hr = pDXGIDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&pDXGIAdapter);

IDXGIFactory1 * pIDXGIFactory;
pDXGIAdapter->GetParent(__uuidof(IDXGIFactory1), (void **)&pIDXGIFactory);

メソッド 2

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

vtbl 12 HRESULT EnumAdapters1(DWORD Adapter, IDXGIAdapter1** ppAdapter)

出力(アウトプット)の有無にかかわらず、両方のアダプター(ビデオカード)を列挙します。

AdapterDWORDin列挙するアダプターのインデックス。
ppAdapterIDXGIAdapter1**outAdapter パラメーターで指定された位置にある IDXGIAdapter1 インターフェイスへのポインターのアドレス。
このパラメーターは NULL であってはなりません。

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合、インデックスがローカルシステムのアダプター数以上であれば DXGI_ERROR_NOT_FOUND を、 ppAdapter パラメーターが NULL であれば DXGI_ERROR_INVALID_CALL を返します。

解説(Remarks)

このメソッドは、Windows Vista および Windows Server 2008 に同梱された DXGI 1.0 ではサポートされていません。DXGI 1.1 のサポートが必要であり、これは Windows 7、Windows Server 2008 R2、および Windows Vista with Service Pack 2 (SP2) への更新プログラム (KB 971644) と Windows Server 2008 (KB 971512) で利用できます。

ファクトリを作成すると、ファクトリはシステムで利用可能なアダプターのセットを列挙します。したがって、システムのアダプターを変更した場合は、 IDXGIFactory1 オブジェクトを破棄して再作成する必要があります。システム内のアダプター数は、ディスプレイカードを追加または取り外したり、ノートパソコンをドッキングまたはドッキング解除したりすると変化します。

EnumAdapters1 メソッドが成功し、ppAdapter パラメーターにアダプターインターフェイスへのポインターのアドレスを格納すると、EnumAdapters1 はアダプターインターフェイスの参照カウントをインクリメントします。アダプターインターフェイスの使用を終えたら、 ポインターを破棄する前に Release メソッドを呼び出して参照カウントをデクリメントしてください。

EnumAdapters1 は最初に、デスクトップのプライマリが表示される出力(アウトプット)を持つアダプターを返します。このアダプターはインデックス 0 に対応します。次に EnumAdapters1 は、出力(アウトプット)を持つ他のアダプターを返します。最後に EnumAdapters1 は、出力(アウトプット)を持たないアダプターを返します。

Examples

アダプターの列挙

次のコード例は、EnumAdapters1 メソッドを使用してアダプターを列挙する方法を示します。


UINT i = 0; 
IDXGIAdapter1 * pAdapter; 
std::vector <IDXGIAdapter1*> vAdapters; 
while(pFactory->EnumAdapters1(i, &pAdapter) != DXGI_ERROR_NOT_FOUND) 
{ 
    vAdapters.push_back(pAdapter); 
    ++i; 
} 
          
vtbl 13 BOOL IsCurrent()

アダプターを再列挙する必要が生じる可能性をアプリケーションに通知します。

戻り値

型: BOOL

新しいアダプターが利用可能になりつつある場合、または現在のアダプターがなくなりつつある場合は FALSE。 アダプターに変化がない場合は TRUE

IsCurrentFALSE を返すことで、呼び出し元のアプリケーションにアダプターの再列挙を促します。

解説(Remarks)

このメソッドは、Windows Vista および Windows Server 2008 に同梱された DXGI 1.0 ではサポートされていません。DXGI 1.1 のサポートが必要であり、これは Windows 7、Windows Server 2008 R2、および Windows Vista with Service Pack 2 (SP2) への更新プログラム (KB 971644) と Windows Server 2008 (KB 971512) で利用できます。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IDXGIFactory1 "{770AAE78-F26F-4DBA-A829-253C83D1B387}"
#usecom global IDXGIFactory1 IID_IDXGIFactory1 "{}"
#comfunc global IDXGIFactory1_EnumAdapters1  12 int,sptr
#comfunc global IDXGIFactory1_IsCurrent      13
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。