Windows 7 快速屏幕捕获和丢失Vsync

Windows 7 快速屏幕捕获和丢失Vsync,windows-7,directshow,screenshot,capture,vsync,Windows 7,Directshow,Screenshot,Capture,Vsync,我想用一个自制的应用程序实时生成一部电影,该应用程序可以快速截屏,部分屏幕被运行的3D应用程序占用 我知道已经有几个应用程序(如FRAPS或Taksi),甚至还有专用的DirectShow过滤器(如UScreenCapture),但我确实需要用我自己的外部应用程序来实现这一点 如果设置正确(UScreenCapture+ffdshow),捕获一个压缩全屏的视频不会消耗您预期的CPU(约15%),也不会影响3D应用程序的性能 从外部应用程序进行捕获的问题在于,3D应用程序会丢失其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不确定)

我的问题是,是否有一种方法可以实现Windows7及其全新的DirectX合成引擎的目标

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

还有其他建议吗,技术?
谢谢

我在

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


相关:

您是如何使用ffmpeg的?