gpt4 book ai didi

c++ - Directx 11 前置缓冲器

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:07 25 4
gpt4 key购买 nike

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

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

所以我想知道我是否遗漏了什么。

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

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

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

非常感谢,

最佳答案

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

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

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

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

关于c++ - Directx 11 前置缓冲器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18459004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com