2

我刚开始学习 DX,所以虽然我确实了解 OpenGL(在一定程度上),但我对此几乎一无所知。我按照教程(http://www.rastertek.com/tutdx11.html),我有一个工作窗口呈现白色背景(清晰)。

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

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

4

2 回答 2

4

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

swapChain->SetFullScreenState(true, NULL);

MSDN

于 2013-04-22T09:12:36.897 回答
2

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

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

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

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

你可以在这里查看 DirectXTK 是如何做到的: https ://directxtk.codeplex.com/

于 2015-03-30T12:26:26.333 回答