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

C++ 在DirectX 11中切换全屏需要什么?,c++,toggle,fullscreen,directx-11,C++,Toggle,Fullscreen,Directx 11,我刚刚开始学习DX,所以我对它几乎一无所知,尽管我知道OpenGL(在一定程度上)。我正在学习教程(),我有一个工作窗口,只渲染白色背景(清晰) 现在-如何从窗口模式切换到全屏模式,反之亦然?我知道有很多教程,有些甚至提供了代码,但由于我是一个新手,这并没有真正的帮助。为什么?因为每个代码样本都是不同的,试图在所有样本中找到一个模式对我来说显然太难了 因此,我不要求代码,而是希望您告诉我我需要发布/重新创建/更改哪些内容才能正确切换(以及所有内容)。我知道我需要更改显示设置,我知道我必须更改有关

我刚刚开始学习DX,所以我对它几乎一无所知,尽管我知道OpenGL(在一定程度上)。我正在学习教程(),我有一个工作窗口,只渲染白色背景(清晰)

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


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

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

swapChain->SetFullScreenState(true, NULL);

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

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

  • 清除上一个特定于窗口大小的上下文
  • 如果交换链已经存在,请调整其大小,否则创建一个交换链
  • 获取此窗口的backbuffer,该窗口将成为最终3D渲染目标
  • 在渲染目标上创建视图界面,以便在绑定时使用
  • 分配一个二维曲面作为深度/模具缓冲区,并在此曲面上创建一个深度模具视图,以便在绑定时使用
  • 创建完整窗口大小的视口描述符
  • 使用描述符设置当前视口
static
函数内部(除非
WinMain
有要调用的对象),并在触发
WM_SIZE
消息时调用该函数

您可以在此处查看DirectXTK是如何实现的:

您看过DirectX示例了吗?我知道其中有很多示例都有全屏按钮,您可以查看。我真的认为这还不够。为什么不呢?您是否尝试过使用这种方法,您是否遇到问题或错误?您能否更正输入错误?只有一封信,所以我不能写。