У меня есть цель визуализации Direct2D, созданная с помощью ID2D1Factory :: CreateDxgiSurfaceRenderTarget. Когда я получаю сообщение WM_SIZE, я пытаюсь изменить размер соответствующей цепочки подкачки, вызывая IDXGISwapChain :: ResizeBuffers, но происходит сбой с DXGI_ERROR_INVALID_CALL (0x887a0001). Я считаю, что это из-за следующего документация ResizeBuffers:
Вы не можете изменить размер цепочки подкачки, если не освободите все выдающиеся ссылки на ее обратные буферы. Вы должны освободить все его прямые и косвенные ссылки на резервные буферы, чтобы ResizeBuffers был успешным.
Прямые ссылки удерживаются приложением после вызова AddRef для ресурса.
Косвенные ссылки хранятся в представлениях ресурса, связывая представление ресурса с контекстом устройства, список команд, которые использовали ресурс, список команд, которые использовали представление для этого ресурса, список команд, которые выполняли другой список команд, который использовал ресурс и тд.
Я хотел бы предположить, что цель визуализации Direct2D, созданная ID2D1RenderTarget :: CreateDxgiSurfaceRenderTarget, является одной из таких косвенных ссылок. Но я не могу себе представить, что я должен воссоздавать цель рендеринга каждый раз, когда размер окна изменяется, так что мне делать?
Как ни крути, очевидно, цель рендеринга нужно создавать заново каждый раз, когда размер окна изменяется, как объяснено Вот.