【问题标题】:Resizing a DXGI swap chain bound to a Direct2D render target调整绑定到 Direct2D 渲染目标的 DXGI 交换链的大小
【发布时间】:2015-05-08 10:28:51
【问题描述】:

我有一个使用 ID2D1Factory::CreateDxgiSurfaceRenderTarget 创建的 Direct2D 渲染目标。当我收到 WM_SIZE 消息时,我尝试通过调用 IDXGISwapChain::ResizeBuffers 来调整相应交换链的大小,但它失败并显示 DXGI_ERROR_INVALID_CALL (0x887a0001)。我相信这是因为the ResizeBuffers documentation 所说的以下内容:

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

应用程序在对资源调用 AddRef 后持有直接引用。

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

我假设由 ID2D1RenderTarget::CreateDxgiSurfaceRenderTarget 创建的 Direct2D 渲染目标就是这样一种间接引用。但是我无法想象每次调整窗口大小时我都应该重新创建渲染目标,那我该怎么办?

【问题讨论】:

    标签: c++ direct3d direct2d dxgi


    【解决方案1】:

    没关系,显然每次调整窗口大小时都需要重新创建渲染目标,如 here 所述。

    【讨论】:

      猜你喜欢
      • 2013-09-30
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      相关资源
      最近更新 更多