Что необходимо для переключения в полноэкранном режиме в DirectX 11?

Я только начал изучать DX, поэтому я почти ничего не знаю об этом, хотя я знаю OpenGL (в определенной степени). Я следую учебнику (http://www.rastertek.com/tutdx11.html) и у меня есть рабочее окно рендеринга только на белом фоне (ясно).

Теперь — как мне на самом деле переключиться из оконного режима в полноэкранный режим и наоборот? Я знаю, что есть много учебных пособий, некоторые даже предоставляют код для этого, но поскольку я новичок, это не очень полезно. Зачем? Потому что каждый пример кода отличается, и попытка найти шаблон во всех них, по-видимому, слишком сложна для меня.

Поэтому я не прошу код — вместо этого я хотел бы, чтобы вы сказали мне какие вещи мне нужно выпустить / воссоздать / изменить правильно переключаться (и все они). Я знаю, что мне нужно изменить настройки дисплея, я знаю, что мне нужно что-то изменить в цепочке подкачки и освободить / воссоздать некоторые буферы — но не совсем уверен, что именно.

2

Решение

Вы можете использовать SetFullScreenState в вашей цепочке обмена:

swapChain->SetFullScreenState(true, NULL);

MSDN

4

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

Главное, что вам нужно сделать, это освободить все ссылки на IDXGISwapChain, вызов ResizeBuffers, а затем воссоздать все.

С Win32 кидает WM_SIZE сообщение при инициализации окна, вполне возможно:

  • Очистить предыдущий контекст, зависящий от размера окна
  • Если цепочка обмена уже существует, измените ее размер, в противном случае создайте
  • Получите задний буфер для этого окна, которое будет конечной целью 3D-рендеринга.
  • Создайте интерфейс представления в rendertarget для использования в bind.
  • Выделите двумерную поверхность в качестве буфера глубины / трафарета и создайте представление DepthStencil на этой поверхности для использования при связывании.
  • Создайте дескриптор области просмотра полного размера окна.
  • Установите текущий видовой экран, используя дескриптор.

внутри static функция (если WinMain имеет объект для вызова) и вызывает эту функцию, когда WM_SIZE сообщение сработало.

Вы можете проверить, как DirectXTK делает это здесь:
https://directxtk.codeplex.com/

2

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