Изменение размера цепочки обмена DXGI, связанной с целью визуализации Direct2D

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

Вы не можете изменить размер цепочки подкачки, если не освободите все выдающиеся ссылки на ее обратные буферы. Вы должны освободить все его прямые и косвенные ссылки на резервные буферы, чтобы ResizeBuffers был успешным.

Прямые ссылки удерживаются приложением после вызова AddRef для ресурса.

Косвенные ссылки хранятся в представлениях ресурса, связывая представление ресурса с контекстом устройства, список команд, которые использовали ресурс, список команд, которые использовали представление для этого ресурса, список команд, которые выполняли другой список команд, который использовал ресурс и тд.

Я хотел бы предположить, что цель визуализации Direct2D, созданная ID2D1RenderTarget :: CreateDxgiSurfaceRenderTarget, является одной из таких косвенных ссылок. Но я не могу себе представить, что я должен воссоздавать цель рендеринга каждый раз, когда размер окна изменяется, так что мне делать?

2

Решение

Как ни крути, очевидно, цель рендеринга нужно создавать заново каждый раз, когда размер окна изменяется, как объяснено Вот.

1

Другие решения


По вопросам рекламы [email protected]