D3D11CreateDeviceAndSwapChain 函数 (d3d11.h)
创建表示显示适配器的设备以及用于呈现的交换链。
语法
HRESULT D3D11CreateDeviceAndSwapChain(
[in, optional] IDXGIAdapter *pAdapter,
D3D_DRIVER_TYPE DriverType,
HMODULE Software,
UINT Flags,
[in, optional] const D3D_FEATURE_LEVEL *pFeatureLevels,
UINT FeatureLevels,
UINT SDKVersion,
[in, optional] const DXGI_SWAP_CHAIN_DESC *pSwapChainDesc,
[out, optional] IDXGISwapChain **ppSwapChain,
[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 获取句柄。 当D3D_DRIVER_TYPE为D3D_DRIVER_TYPE_SOFTWARE时,该值应为非 NULL,否则为 NULL。
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。
[in, optional] pSwapChainDesc
类型: const DXGI_SWAP_CHAIN_DESC*
指向交换链说明的指针 (查看包含交换链初始化参数 的DXGI_SWAP_CHAIN_DESC) 。
[out, optional] ppSwapChain
类型: IDXGISwapChain**
返回指向 IDXGISwapChain 对象的指针的地址,该对象表示用于呈现的交换链。
[out, optional] ppDevice
类型: ID3D11Device**
返回指向表示所创建设备的 ID3D11Device 对象的指针的地址。 如果此参数为 NULL,则不会返回 ID3D11Device”。
[out, optional] pFeatureLevel
类型: D3D_FEATURE_LEVEL*
返回指向 D3D_FEATURE_LEVEL的指针,该指针表示设备支持的功能级别数组中的第一个元素。 如果不需要确定支持的功能级别,请提供 NULL 作为输入。
[out, optional] ppImmediateContext
类型: ID3D11DeviceContext**
返回指向表示设备上下文的 ID3D11DeviceContext 对象的指针的地址。 如果此参数为 NULL,则不会返回 ID3D11DeviceContext。
返回值
类型: HRESULT
此方法可以返回 Direct3D 11 返回代码之一。
如果在会话 0 进程中调用此方法,则此方法将返回 DXGI_ERROR_NOT_CURRENTLY_AVAILABLE 。
如果将 pAdapter 参数设置为非 NULL 值, 将 DriverType 参数设置为D3D_DRIVER_TYPE_HARDWARE值,此方法将返回E_INVALIDARG。
如果在 Flags 中指定D3D11_CREATE_DEVICE_DEBUG,并且计算机上安装了错误版本的调试层,则此方法将返回DXGI_ERROR_SDK_COMPONENT_MISSING。 安装最新的 Windows SDK 以获取正确的版本。
注解
若要创建 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 接口。
另请参阅 D3D11CreateDevice 中的备注部分,了解有关输入参数依赖项的详细信息。 若要在不创建交换链的情况下创建设备,请使用 D3D11CreateDevice 函数。
如果将 pAdapter 参数设置为非 NULL 值,还必须将 DriverType 参数设置为D3D_DRIVER_TYPE_UNKNOWN值。 如果将 pAdapter 参数设置为非 NULL 值, 并将 DriverType 参数设置为D3D_DRIVER_TYPE_HARDWARE值, 则 D3D11CreateDeviceAndSwapChain 将返回E_INVALIDARG的 HRESULT 。
函数签名PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN作为 typedef 提供,因此可以使用动态链接技术 (GetProcAddress) 而不是静态链接。
使用情况说明
要求
目标平台 | Windows |
标头 | d3d11.h |
Library | D3D11.lib |
DLL | D3D11.dll |