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,但不能同时使用 IDXGIFactory
 

DriverType

类型: D3D_DRIVER_TYPE

D3D_DRIVER_TYPE,表示要创建的驱动程序类型。

Software

类型: HMODULE

实现软件光栅器的 DLL 的句柄。 如果 DriverType是D3D_DRIVER_TYPE_SOFTWARE则软件 不得为 NULL。 通过调用 LoadLibraryLoadLibraryExGetModuleHandle 获取句柄。

Flags

类型: UINT

要启用的运行时 (请参阅 D3D11_CREATE_DEVICE_FLAG) ;值可以按位 OR 组合在一起。

[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 == NULL,则 DriverType 不能设置为 D3D_DRIVER_TYPE_UNKNOWN;它可以设置为:
  • 如果 DriverType == D3D_DRIVER_TYPE_SOFTWARE, 则 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
Library D3D11.lib
DLL D3D11.dll

另请参阅

核心函数