Directx 11前置缓冲器

时间:2013-08-27 07:01:42

标签: c++ directx directx-11 directx-10 dxgi

我希望这是一个简单的答案,我无法找到答案。

如何访问Directx 11 / DXGI中的前端缓冲区?我在Directx 9中发现你可以使用GetFrontBufferData(),你可以在Directx 11中使用GetBuffer()来访问后备缓冲区,但是这有问题。后缓冲区没有对前缓冲区进行计算。

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

我可以尝试使用GetDisplaySurfaceData,除非我对某些内容有误解,否则它将无效,因为我并不总是处于全屏模式。

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

是否可以在Directx 11中获得前置缓冲区?

非常感谢,

1 个答案:

答案 0 :(得分:2)

您需要使用IDXGISwapChain::GetBuffer API来检索交换链表面(对结果类型使用uuid ID3D11Texture2D)。

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

  • 使用ID3D11Texture2D::GetDesc检索表面描述
  • 使用D3D11_USAGE_STAGING用法和D3D11_CPU_ACCESS_READ
  • 的cpu访问标记进行修补
  • 创建临时表面ID3D11Device::CreateTexture2D
  • 复制到临时表面ID3D11DeviceContext::CopyResource

您现在拥有一个ID3D11Texture2D,其中包含您的交换链缓冲区的内容,允许您使用ID3D11DeviceContext::Map API在CPU上读取它