DirectX - BackBuffer 概念

Posted

技术标签:

【中文标题】DirectX - BackBuffer 概念【英文标题】:DirectX - BackBuffer concept 【发布时间】:2012-10-21 20:11:13 【问题描述】:

我是 DirectX 的新手,花了一些时间阅读文档后,我才知道有两个视频缓冲区,即 FrontBuffer 和 BackBuffer。根据一些消息来源,我正在执行 POC 以验证最快的屏幕捕获方法和 BackBuffer 可能会做到这一点。 (FrontBuffer 访问对我来说太慢了)

但不幸的是,互联网上并没有那么多详细解释该理论的好文章。如果得到解答,我有一些问题也可能对其他人有所帮助。

    后台缓冲区只是应用程序可以写入的表面吗? 后台缓冲区应用程序是特定的吗?即为每个 DX 应用程序单独的后台缓冲区? 如果我正在运行一些应用程序,它使用 DirectX 在屏幕上显示一些数据,我可以捕获它的后台缓冲区吗? (根据 FRAPS 分析,可以将 DLL 连接到应用程序来执行此操作。但是有什么指南吗?)

【问题讨论】:

【参考方案1】:
    是的。根据您使用的 DirectX 版本,后台缓冲区是作为渲染目标创建的表面或纹理。 是的。每个应用程序都有自己的后端和前端缓冲区。应用程序甚至不限于使用一个后台缓冲区。相反,它可以使用三个或更多缓冲区,或者根本不使用后台缓冲区。 好吧,我不是挂钩 DirectX 应用程序的专家,但这应该是可能的。基本上,您可以将Present 方法替换为在呈现之前捕获缓冲区的方法。有关其他信息,请参阅 here。

【讨论】:

注意(关于 2.)使用 3 个以上的缓冲区是不必要的,但可能很有用:如果您完成了第三个缓冲区,您可以将其设置为下一个要绘制的缓冲区并重新开始工作第二个(假设您仍在等待第一个完成绘图)。但是,如果您需要回滚几帧,或者由于某种原因可以提前准备好结果(即随着帧速率线性进展,或者您在某些时间点之间来回走动),您可以让它们准备好,因为它们可以预先计算。否则它只会占用内存中的空间。

以上是关于DirectX - BackBuffer 概念的主要内容,如果未能解决你的问题,请参考以下文章

在 DirectX9 中更改分辨率

比较DirectX和OpenGL的区别

DirectX 应用程序中 Alt-Tab 支持的最佳实践?

为啥 DirectX/DirectWrite/Direct2D 文本渲染不能像 GDI 一样清晰?

[210117]dll动态链接库和c++依赖库缺失修复 DirectX Repair 修复系统dll缺失及C++组件异常

Spring -- IOC/DI 基础概念的理解