Метод 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

См. также раздел

IDXGISwapChain