Изменение размера цепочки обмена DXGI, привязанной к цели рендеринга Direct2D

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

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

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

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

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


person user1610015    schedule 08.05.2015    source источник


Ответы (1)


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

person user1610015    schedule 08.05.2015