我正在尝试在Windows上捕获基于OpenGL的游戏的屏幕截图。互联网上的大多数答案都是让窗口可见并截取屏幕截图。但是当我使用OBS(Open Broadcaster Software)来播放我的游戏时,即使游戏窗口被最小化,也能够流式传输游戏内容。
任何人都可以帮助我了解他们是如何做到的吗?
谢谢!
答案 0 :(得分:1)
OpenGL API提供了一种绘制内部"帧缓冲区对象的方法。 (FBO)可以对窗户进行装配。如果OBS没有提供访问该FBO的方法,那么您唯一的解决方案是使窗口可见。好吧,你也可以破解广播并试图找出那些字节...
当OP澄清他的问题时,我很好奇。所以我挖到了OBS代码,发现对于Windows,它使用.dll注入和进程挂钩。
我还发现它挂钩"交换缓冲区"并使用glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING ...)获取当前帧缓冲区,复制它,然后让Windows继续工作。
请注意我错了。但我发现的对我来说很好看。