我希望这是一个简单的答案,我无法找到答案。
如何访问Directx 11 / DXGI中的前端缓冲区?我在Directx 9中发现你可以使用GetFrontBufferData(),你可以在Directx 11中使用GetBuffer()来访问后备缓冲区,但是这有问题。后缓冲区没有对前缓冲区进行计算。
所以我想知道是否有我遗失的东西。
我可以尝试使用GetDisplaySurfaceData,除非我对某些内容有误解,否则它将无效,因为我并不总是处于全屏模式。
编辑:有人能让我知道GetBuffer如何在SwapChain for Directx 11中工作。正如我所读到的那样,抗锯齿只发生在前端缓冲区而不是后备缓冲区。 0是第一个后备缓冲区吗? (Microsoft声明您在某些情况下只能使用0。)
是否可以在Directx 11中获得前置缓冲区?
非常感谢,
答案 0 :(得分:2)
您需要使用IDXGISwapChain::GetBuffer
API来检索交换链表面(对结果类型使用uuid ID3D11Texture2D
)。
现在,交换链缓冲区不可映射,因此您需要将其复制到临时资源。
ID3D11Texture2D::GetDesc
检索表面描述D3D11_USAGE_STAGING
用法和D3D11_CPU_ACCESS_READ
ID3D11Device::CreateTexture2D
ID3D11DeviceContext::CopyResource
您现在拥有一个ID3D11Texture2D
,其中包含您的交换链缓冲区的内容,允许您使用ID3D11DeviceContext::Map
API在CPU上读取它