快速捕获屏幕并丢失Vsync

时间:2010-05-11 22:21:07

标签: windows-7 directshow screenshot capture vsync

我想用自制的应用程序实时生成一部电影,快速进行屏幕捕获,部分屏幕由正在运行的3D应用程序占用。

我知道已经存在多个应用程序(如FRAPS或Taksi),甚至还有专用的DirectShow过滤器(如UScreenCapture),但我真的需要用我自己的外部应用程序来实现。

正确设置(UScreenCapture + ffdshow)时,捕获压缩全屏不会消耗尽可能多的CPU(约15%),并且不会损害3D应用程序的性能。

从外部应用程序执行捕获的问题是3D应用程序丢失了它的Vsync并创建了一个毛茸茸的,难以使用的3D应用程序(3D应用程序仅在屏幕的一小部分呈现,其余为GDI,的DirectX)

FRAPS允许您一次只捕获一个应用程序(具有焦点的应用程序),从而解决了这个问题。根据所使用的技术(OpenGl,DirectX,GDI),它会挂钩Vsync并进行捕获(使用glReadPixels,...),而不会产生干扰。 这样做并不能解决我的问题,因为我想要完整的合成屏幕图像(包括3D和其余部分)和平滑的3D应用程序。

UScreenCapture似乎使用快速的DirectX调用来捕获整个屏幕,但openGL 3D应用程序仍然不同步。

做一个BitBlt太慢而且CPU消耗太快以进行实时30 fps采集(至少在Windows XP下,不确定是7)

我的问题是要知道是否有办法实现我的Windows 7目标及其全新的DirectX合成引擎?

Windows 7成功显示每个应用程序(在任务栏中)的实时VSynced重复预览,因此必须有一种方法可以访问当前显示的屏幕缓冲区而不会影响3D OpenGL应用程序的呈现?

还有其他任何建议吗? 谢谢

1 个答案:

答案 0 :(得分:1)

我在

列出了可能有用的链接

http://betterlogic.com/roger/?p=3037

如果您有任何成功,请告诉我 - 最终我也会对Windows的快速开源屏幕截图感兴趣...

相关:Fastest method of screen capturing