在DirectX 11中切换全屏需要什么?

时间:2013-04-21 10:52:08

标签: c++ toggle fullscreen directx-11

我刚开始学习DX所以我几乎一无所知,尽管我知道OpenGL(在某种程度上)。我正在遵循一个教程(http://www.rastertek.com/tutdx11.html),我有一个工作窗口只渲染一个白色背景(清晰)。

现在 - 我如何实际从窗口模式切换到全屏模式,反之亦然?我知道有很多教程,有些甚至提供了这样做的代码,但因为我是一个不太有帮助的新手。为什么?因为每个代码示例都不同,并且试图在所有代码中找到一个模式对我来说显然太难了。

所以我不要求代码 - 相反,我希望您告诉我我需要释放/重新创建/更改以正确切换(以及所有这些)。我知道我需要更改显示设置,我知道我必须改变关于交换链的一些内容并释放/重新创建一些缓冲区 - 但不确定究竟是哪一个。

2 个答案:

答案 0 :(得分:5)

您可以在交换链上使用SetFullScreenState:

swapChain->SetFullScreenState(true, NULL);

MSDN

答案 1 :(得分:2)

您要做的主要事情是释放对IDXGISwapChain的所有引用,调用ResizeBuffers,然后重新创建所有内容。

由于Win32在窗口初始化时抛出WM_SIZE消息,因此完全可以:

  • 清除以前特定于窗口大小的上下文
  • 如果交换链已存在,请调整其大小,否则创建一个
  • 获取此窗口的后备缓冲区,这将是最终的3D渲染目标。
  • 在rendertarget上创建一个用于bind的视图界面。
  • 将2-D曲面分配为深度/模板缓冲区,并在此曲面上创建DepthStencil视图以用于绑定。
  • 创建完整窗口大小的视口描述符。
  • 使用描述符设置当前视口。

static函数内(除非WinMain有一个可以调用的对象),并在触发WM_SIZE消息时调用该函数。

您可以在此处查看DirectXTK的工作方式: https://directxtk.codeplex.com/