c – 执行时间:GetFrontBufferData,GetBackBuffer,GetRenderTar
我正在尝试使用DirectX捕获屏幕的几种方法,到目前为止我已经提出了3种方法:
> > GetFrontBufferData():0.83598 s > > GetBackBuffer():0 s< - 有趣 - 为什么? > > GetRenderTargetData():0.00928 s 通过拍摄50个屏幕截图并通过 但是,正如您所看到的,上述所有方法都可以工作,对于相同的结果(显然),执行时间因方法而异. 所以我有几个问题: >为什么从一种方法到另一种方法的执行时间差别如此之大? 我对我的第一个问题有一个假设,如果我错了,请纠正我: > GetFrontBufferData()非常慢,因为前缓冲区在VRAM中并且它被锁定/保护,因为它是当前显示在屏幕上的内容. 谢谢. 编辑:我还在寻找答案. 解决方法
您所指的过程称为“回读”,它涉及从GPU视频RAM复制数据.除了一些特定的统一内存架构(例如Xbox 360)之外,回读是一个缓慢的过程.
根据您的操作系统和其他设置,前缓冲区和后缓冲区可能都只是VRAM中的“屏幕外”纹理.当您暂停渲染以捕获屏幕截图时,还会涉及各种锁和GPU管道停顿. 你可能会发现这个(现在很旧)article很有用. 请注意,Direct3D 10/11提供了许多功能,可以通过允许算法将数据保存在GPU上来克服GPU的“回读”固有的缓慢. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |