Метод IDXGISwapChain::ResizeBuffers (dxgi.h)
Изменяет размер, формат и число буферов обратной цепочки буферов. Он должен вызываться при изменении размера окна приложения.
Синтаксис
HRESULT ResizeBuffers(
UINT BufferCount,
UINT Width,
UINT Height,
DXGI_FORMAT NewFormat,
UINT SwapChainFlags
);
Параметры
BufferCount
Тип: UINT
Количество буферов в цепочке буферов (включая все задние и передние буферы). Это число может отличаться от числа буферов, с помощью которых была создана цепочка буферов. Это число не может быть больше DXGI_MAX_SWAP_CHAIN_BUFFERS. Задайте для этого числа нулевое значение, чтобы сохранить существующее количество буферов в цепочке буферов. Вы не можете указать менее двух буферов для модели представления с пролистыванием.
Width
Тип: UINT
Новая ширина заднего буфера. Если указать ноль, DXGI будет использовать ширину клиентской области целевого окна. Невозможно указать нулевую ширину, если вы вызвали метод IDXGIFactory2::CreateSwapChainForComposition для создания цепочки буферов для поверхности композиции.
Height
Тип: UINT
Новая высота заднего буфера. Если указать ноль, DXGI будет использовать высоту клиентской области целевого окна. Невозможно указать нулевое значение высоты, если вы вызвали метод IDXGIFactory2::CreateSwapChainForComposition для создания цепочки буферов для поверхности композиции.
NewFormat
Тип: DXGI_FORMAT
DXGI_FORMAT типизированное значение для нового формата заднего буфера. Присвойте этому значению значение DXGI_FORMAT_UNKNOWN , чтобы сохранить существующий формат заднего буфера. Модель пролистывания презентации поддерживает более ограниченный набор форматов, чем модель передачи битового блока (bitblt).
SwapChainFlags
Тип: UINT
Сочетание DXGI_SWAP_CHAIN_FLAG типизированных значений, объединенных с помощью побитовой операции ИЛИ. Полученное значение задает параметры поведения цепочки буферов.
Возвращаемое значение
Тип: HRESULT
Возвращает S_OK в случае успешного выполнения; в противном случае — код ошибки. Список кодов ошибок см. в разделе DXGI_ERROR.
Комментарии
Изменить размер цепочки буферов можно только после освобождения всех невыполненных ссылок на задние буферы. Для успешного выполнения ResizeBuffers необходимо освободить все прямые и косвенные ссылки на задние буферы.
Прямые ссылки хранятся приложением после вызова AddRef в ресурсе.
Косвенные ссылки хранятся представлениями к ресурсу, привязкой представления ресурса к контексту устройства, списком команд, который использовал ресурс, списком команд, который использовал представление для этого ресурса, списком команд, который выполнял другой список команд, в котором использовался ресурс, и т. д.
Перед вызовом ResizeBuffers убедитесь, что приложение освобождает все ссылки (путем вызова соответствующего количества вызовов release ) для ресурсов, всех представлений ресурса и списков команд, использующих ресурсы или представления, и убедитесь, что ни ресурс, ни представление по-прежнему не привязаны к контексту устройства. Вы можете использовать ID3D11DeviceContext::ClearState , чтобы обеспечить освобождение всех ссылок. Если представление привязано к отложенном контексту, необходимо также отменить частично созданный список команд (вызвав ID3D11DeviceContext::ClearState, затем ID3D11DeviceContext::FinishCommandList, а затем Release в списке команд). После вызова ResizeBuffers можно повторно запрашивать интерфейсы через IDXGISwapChain::GetBuffer.
Для цепочек буферов, созданных с помощью DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE, перед вызовом ResizeBuffers также вызовите IDXGISurface1::ReleaseDC в области обратного буфера цепочки буферов, чтобы убедиться, что у вас нет открытых контекстов устройств (DCs) GDI.
Рекомендуется вызывать ResizeBuffers при изменении размера окна клиента (то есть, когда приложение получает WM_SIZE сообщение).
Единственное различие между IDXGISwapChain::ResizeBuffers в Windows 8 и Windows 7 заключается в цепочках буферов модели представления флип, создаваемых с помощью набора DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL или DXGI_SWAP_EFFECT_FLIP_DISCARD значений. В Windows 8 необходимо вызвать ResizeBuffers , чтобы реализовать переход между полноэкранным режимом и оконным режимом; В противном случае следующий вызов метода IDXGISwapChain::P resent завершается ошибкой .
Требования
Целевая платформа | Windows |
Header | dxgi.h |
Библиотека | DXGI.lib |