D3D11CreateDevice 函式 (d3d11.h)

建立代表顯示配接器的裝置。

語法

HRESULT D3D11CreateDevice(
  [in, optional]  IDXGIAdapter            *pAdapter,
                  D3D_DRIVER_TYPE         DriverType,
                  HMODULE                 Software,
                  UINT                    Flags,
  [in, optional]  const D3D_FEATURE_LEVEL *pFeatureLevels,
                  UINT                    FeatureLevels,
                  UINT                    SDKVersion,
  [out, optional] ID3D11Device            **ppDevice,
  [out, optional] D3D_FEATURE_LEVEL       *pFeatureLevel,
  [out, optional] ID3D11DeviceContext     **ppImmediateContext
);

參數

[in, optional] pAdapter

類型: IDXGIAdapter*

建立 裝置時要使用的視訊配接器指標。 傳遞 Null 以使用預設配接器,這是 IDXGIFactory1::EnumAdapters列舉的第一個介面卡。

注意 請勿在應用程式中混用 DXGI 1.0 (IDXGIFactory) 和 DXGI 1.1 (IDXGIFactory1) 。 在應用程式中使用 IDXGIFactoryIDXGIFactory1,但不能同時使用兩者。
 

DriverType

類型: D3D_DRIVER_TYPE

D3D_DRIVER_TYPE,表示要建立的驅動程式類型。

Software

類型: HMODULE

實作軟體轉譯器的 DLL 控制碼。 如果 DriverType是D3D_DRIVER_TYPE_SOFTWARE軟體 不得為 Null。 呼叫 LoadLibraryLoadLibraryExGetModuleHandle以取得控制碼。

Flags

類型: UINT

要啟用 (的執行時間 ,請參閱 D3D11_CREATE_DEVICE_FLAG) ;值可以位 OR'd 在一起。

[in, optional] pFeatureLevels

類型:const D3D_FEATURE_LEVEL*

D3D_FEATURE_LEVEL陣列的指標,決定要嘗試建立的功能層級順序。 如果 pFeatureLevels 設定為 Null,此函式會使用下列功能層級陣列:

{
    D3D_FEATURE_LEVEL_11_0,
    D3D_FEATURE_LEVEL_10_1,
    D3D_FEATURE_LEVEL_10_0,
    D3D_FEATURE_LEVEL_9_3,
    D3D_FEATURE_LEVEL_9_2,
    D3D_FEATURE_LEVEL_9_1,
};
注意 如果電腦上存在 Direct3D 11.1 執行時間,且 pFeatureLevels 設定為 Null,此函式將不會建立 D3D_FEATURE_LEVEL_11_1 裝置。 若要建立D3D_FEATURE_LEVEL_11_1裝置,您必須明確提供包含D3D_FEATURE_LEVEL_11_1的D3D_FEATURE_LEVEL陣列。 如果您在未安裝 Direct3D 11.1 執行時間的電腦上提供包含D3D_FEATURE_LEVEL_11_1D3D_FEATURE_LEVEL陣列,此函式會立即失敗並E_INVALIDARG。
 

FeatureLevels

類型: UINT

pFeatureLevels中的專案數目。

SDKVersion

類型: UINT

SDK 版本;使用 D3D11_SDK_VERSION

[out, optional] ppDevice

類型: ID3D11Device**

傳回代表所建立裝置之 ID3D11Device 物件的指標位址。 如果此參數為 Null,將不會傳回 ID3D11Device。

[out, optional] pFeatureLevel

類型: D3D_FEATURE_LEVEL*

如果成功,則會從成功之 pFeatureLevels陣列傳回第一個D3D_FEATURE_LEVEL。 如果您不需要判斷支援哪些功能層級,請提供 Null 作為輸入。

[out, optional] ppImmediateContext

類型: ID3D11DeviceCoNtext**

傳回代表裝置內容之 ID3D11DeviceCoNtext 物件的指標位址。 如果此參數為 Null,將不會傳回 ID3D11DeviceCoNtext。

傳回值

類型: HRESULT

這個方法可以傳回其中一個 Direct3D 11 傳回碼

如果您將 pAdapter 參數設定為非Null 值,並將 DriverType 參數設定為D3D_DRIVER_TYPE_HARDWARE值,這個方法會傳回E_INVALIDARG。

如果您在Flags中指定D3D11_CREATE_DEVICE_DEBUG,且電腦上已安裝不正確的偵錯層版本,這個方法會傳回DXGI_ERROR_SDK_COMPONENT_MISSING。 安裝最新的 Windows SDK 以取得正確的版本。

備註

Direct3D 11 執行時間支援此進入點,其可在 Windows 7、Windows Server 2008 R2 上使用,以及更新為 Windows Vista (KB971644) 。

若要建立 Direct3D 11.1 裝置, (ID3D11Device1) , 這適用于已安裝 Windows 7 平臺更新的 Windows 8、Windows Server 2012 和 Windows 7 和 Windows Server 2008 R2 上,您必須先使用此函式建立ID3D11Device,然後在ID3D11Device物件上呼叫QueryInterface方法,以取得ID3D11Device1介面。

若要建立 Direct3D 11.2 裝置 (ID3D11Device2) ,該裝置可在 Windows 8.1 和 Windows Server 2012 R2 上使用,先使用此函式建立ID3D11Device,然後在ID3D11Device物件上呼叫QueryInterface方法,以取得ID3D11Device2介面。

藉由查看pFeatureLevel而不建立裝置,將ppDeviceppImmediateCoNtext設定為Null,以判斷支援哪些功能層級。

如需範例,請參閱 如何:建立裝置和立即內容;若要同時建立裝置和交換鏈結,請使用 D3D11CreateDeviceAndSwapChain

如果您將 pAdapter 參數設定為非Null 值,您也必須將 DriverType 參數設定為D3D_DRIVER_TYPE_UNKNOWN值。 如果您將 pAdapter 參數設定為非Null 值,並將 DriverType 參數設定為 D3D_DRIVER_TYPE_HARDWARE 值, D3D11CreateDevice 會傳回E_INVALIDARG的 HRESULT

Direct3D 10 與 Direct3D 11 之間的差異:

在 Direct3D 10 中, pAdapter 的存在會指定要使用的介面卡,而 DriverType 可能會與配接器不符。

在 Direct3D 11 中,如果您嘗試建立硬體或軟體裝置,請設定 pAdapter != Null ,以限制其他輸入為:

  • DriverType 必須是D3D_DRIVER_TYPE_UNKNOWN
  • 軟體 必須是 Null
另一方面,如果pAdapter == NullDriverType就無法設定為 D3D_DRIVER_TYPE_UNKNOWN;它可以設定為下列其中一項:
  • 如果 DriverType == D3D_DRIVER_TYPE_SOFTWARE, 則軟體 不可為 Null
  • 如果DriverType == D3D_DRIVER_TYPE_HARDWARE,使用的配接器會是預設配接器,這是IDXGIFactory1::EnumAdapters列舉的第一個介面卡
 

函式簽章PFN_D3D11_CREATE_DEVICE會以 typedef 的形式提供,因此您可以使用動態連結技術, (GetProcAddress) 而非靜態連結。

Windows Phone 8:支援此 API。

Windows Phone 8.1:支援此 API。

規格需求

   
目標平台 Windows
標頭 d3d11.h
程式庫 D3D11.lib
Dll D3D11.dll

另請參閱

核心函式