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 枚举的第一个适配器。
DriverType
类型: D3D_DRIVER_TYPE
D3D_DRIVER_TYPE,表示要创建的驱动程序类型。
Software
类型: HMODULE
实现软件光栅器的 DLL 的句柄。 如果 DriverType是D3D_DRIVER_TYPE_SOFTWARE, 则软件 不得为 NULL。 通过调用 LoadLibrary、 LoadLibraryEx 或 GetModuleHandle 获取句柄。
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,
};
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,将 ppDevice 和 ppImmediateContext 设置为 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 ,将其他输入限制为:
|
函数签名PFN_D3D11_CREATE_DEVICE作为 typedef 提供,因此可以使用动态链接技术 (GetProcAddress) 而不是静态链接。
Windows Phone 8:支持此 API。
Windows Phone 8.1:支持此 API。
要求
目标平台 | Windows |
标头 | d3d11.h |
Library | D3D11.lib |
DLL | D3D11.dll |