4

我希望这是一个我找不到答案的简单问题的简单答案。

如何访问 Directx 11 / DXGI 中的前端缓冲区?我在 Directx 9 中发现您可以使用 GetFrontBufferData() 并且您可以在 Directx 11 中使用 GetBuffer() 来访问后台缓冲区,但这存在问题。后缓冲区没有前缓冲区所做的计算。

所以我想知道是否有我遗漏的东西。

我可以尝试使用 GetDisplaySurfaceData,除非我误解了某些内容,否则它不会工作,因为我并不总是处于全屏模式。

编辑:有人可以让我知道 GetBuffer 在 Directx 11 的 SwapChain 中是如何工作的。正如我所读到的,抗锯齿只发生在前缓冲区而不是后缓冲区。0 是第一个后备缓冲区吗?(Microsoft 声明您只能在某些情况下使用 0。)

是否有可能在 Directx 11 中获得前端缓冲区?

非常感谢,

4

1 回答 1

3

您需要使用IDXGISwapChain::GetBufferAPI 来检索交换链表面(使用 uuidID3D11Texture2D作为结果类型)。

现在,交换链缓冲区不可映射,因此您需要将其复制到暂存资源。

  • 用于ID3D11Texture2D::GetDesc检索表面描述
  • D3D11_USAGE_STAGING使用用法和 cpu 访问标志对其进行修补D3D11_CPU_ACCESS_READ
  • 创建临时曲面ID3D11Device::CreateTexture2D
  • 复制到暂存界面ID3D11DeviceContext::CopyResource

你现在有了一个ID3D11Texture2D交换链缓冲区的内容,允许你使用ID3D11DeviceContext::MapAPI 在 CPU 上读取它

于 2013-08-27T10:18:38.730 回答