IDXGISwapChain::ResizeBuffers 方法 (dxgi.h)

更改交换链的后台缓冲区大小、格式和缓冲区数。 在调整应用程序窗口大小时应调用此名称。

语法

HRESULT ResizeBuffers(
  UINT        BufferCount,
  UINT        Width,
  UINT        Height,
  DXGI_FORMAT NewFormat,
  UINT        SwapChainFlags
);

参数

BufferCount

类型: UINT

交换链中的缓冲区数 (包括) 的所有后台缓冲区和前端缓冲区。 此数字可以不同于创建交换链时所使用的缓冲区数。 此数字不能大于 DXGI_MAX_SWAP_CHAIN_BUFFERS。 将此数字设置为零以保留交换链中的现有缓冲区数。 不能为翻转演示文稿模型指定少于两个缓冲区。

Width

类型: UINT

后台缓冲区的新宽度。 如果指定零,DXGI 将使用目标窗口工作区的宽度。 如果调用 IDXGIFactory2::CreateSwapChainForComposition 方法为合成图面创建交换链,则不能将宽度指定为零。

Height

类型: UINT

后台缓冲区的新高度。 如果指定零,DXGI 将使用目标窗口工作区的高度。 如果调用 IDXGIFactory2::CreateSwapChainForComposition 方法为合成图面创建交换链,则不能将高度指定为零。

NewFormat

类型: DXGI_FORMAT

后台缓冲区的新格式的 DXGI_FORMAT类型值。 将此值设置为 DXGI_FORMAT_UNKNOWN 以保留后台缓冲区的现有格式。 翻转表示模型支持比位块传输 (bitblt) 模型更受限的格式集。

SwapChainFlags

类型: UINT

使用按位 OR 运算组合的 DXGI_SWAP_CHAIN_FLAG类型值的组合。 生成的值指定交换链行为的选项。

返回值

类型: HRESULT

如果成功,则返回S_OK;否则为错误代码。 有关错误代码的列表,请参阅 DXGI_ERROR

备注

无法调整交换链的大小,除非释放对其后台缓冲区的所有未完成引用。 必须释放其后台缓冲区上的所有直接引用和间接引用, ResizeBuffers 才能成功。

应用程序在对资源调用 AddRef 后保留直接引用。

间接引用由资源视图、将资源视图绑定到设备上下文、使用资源的命令列表、使用该资源的视图的命令列表、执行使用该资源的另一个命令列表的命令列表,等等。

在调用 ResizeBuffers 之前,请确保应用程序通过调用资源、资源的任何视图以及使用资源或视图的任何命令列表) 适当数量的 Release 调用来释放 (的所有引用,并确保资源或视图都未绑定到设备上下文。 可以使用 ID3D11DeviceContext::ClearState 来确保释放所有引用。 如果视图绑定到延迟的上下文,则必须通过调用 ID3D11DeviceContext::ClearState、ID3D11DeviceContext::FinishCommandList、) 命令列表上的 Release 来放弃部分生成的命令列表以及 (。 调用 ResizeBuffers 后,可以通过 IDXGISwapChain::GetBuffer 重新查询接口。

对于使用 DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE 创建的交换链,在调用 ResizeBuffers 之前,请在交换链的后台缓冲区图面上调用 IDXGISurface1::ReleaseDC ,以确保没有未完成的 GDI 设备上下文 (DC) 打开。

建议在调整客户端窗口大小时调用 ResizeBuffers , (应用程序收到) WM_SIZE消息。

Windows 8 与 Windows 7 中的 IDXGISwapChain::ResizeBuffers 之间的唯一区别是使用设置 DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL 或DXGI_SWAP_EFFECT_FLIP_DISCARD值创建的翻转演示文稿模型交换链。 在 Windows 8 中,必须调用 ResizeBuffers 来实现全屏模式和窗口模式之间的转换;否则,对 IDXGISwapChain::P resent 方法的下一次调用将失败。

要求

   
目标平台 Windows
标头 dxgi.h
Library DXGI.lib

请参阅

IDXGISwapChain