DX10 SwapChain ResizeBuffers(...)vs ResizeTarget(...)

时间:2010-12-20 01:47:05

标签: c++ directx

有什么区别? Google / MSDN似乎没有任何信息。

MSDN:

ResizeBuffers

ResizeTarget

1 个答案:

答案 0 :(得分:0)

在寻找完全不同的东西时找到了这个......

来自MSDN

  

... DXGI调整前缓冲区的大小以匹配新选择的全屏模式,并向应用程序发送WM_SIZE消息。应用程序再次调用ResizeBuffers,就像拖动窗口边框一样。

     

前面解释的方法遵循一条非常特殊的路径。 DXGI默认将全屏分辨率设置为桌面分辨率。然而,许多应用程序切换到首选的全屏分辨率。在这种情况下,DXGI提供IDXGISwapChain :: ResizeTarget。这应该在调用SetFullscreenState之前调用。虽然可以以相反的顺序调用这些方法(首先是SetFullscreenState,然后是ResizeTarget),但这样做会导致将额外的WM_SIZE消息发送到应用程序。 (这样做也会导致闪烁,因为DXGI可能被强制执行两种模式更改。)调用SetFullscreenState后,建议再次调用ResizeTarget,并将RefreshRate成员清零。这相当于DXGI中的无操作指令,但它可以避免刷新率的问题,这将在下面讨论。

     

在全屏模式下,桌面窗口管理器被禁用。 DXGI可以执行翻转以呈现后台缓冲区内容而不是执行blit,这将在窗口模式下执行。但是,如果不满足某些要求,则可以撤消该性能增益。为确保DXGI执行翻转而不是blit,前缓冲区和后缓冲区的大小必须相同。如果应用程序正确处理其WM_SIZE消息,这应该不是问题。此外,格式必须相同。

     

大多数应用程序的问题是刷新率。在调用ResizeTarget时指定的刷新率必须是由交换链正在使用的IDXGIOutput对象枚举的刷新率。如果应用程序将传递给ResizeTarget的DXGI_MODE_DESC的RefreshRate成员清零,则DXGI可以自动计算此值。 ...