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 |