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 枚举的第一个适配器。

注意 不要在应用程序中混合使用 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 获取句柄。 当D3D_DRIVER_TYPED3D_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,
};
          
注意 如果计算机上存在 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

[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 以获取正确的版本。

注解

注意 如果在会话 0 进程中调用此方法,它将返回 DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
 
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 接口。

另请参阅 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) 而不是静态链接。

使用情况说明

注意D3D11CreateDeviceAndSwapChain 函数不适用于 Windows 应用商店应用。 相反,Windows 应用商店应用使用 D3D11CreateDevice 函数,然后使用 IDXGIFactory2::CreateSwapChainForCoreWindow 方法。
 
注意 此函数尚未更新,以支持最近创建交换链的其他功能。 有关最新的交换链创建方法,请参阅 IDXGIFactory2 (包括 CreateSwapChainForHwndCreateSwapChainForCoreWindowCreateSwapChainForComposition) 的方法。
 
Windows Phone 8:支持此 API。

要求

   
目标平台 Windows
标头 d3d11.h
Library D3D11.lib
DLL D3D11.dll

另请参阅

核心函数