【发布时间】: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