5

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

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

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

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

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

4

1 回答 1

2

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

于 2015-05-08T12:29:45.487 回答