【发布时间】:2011-07-08 03:04:58
【问题描述】:
所以我发现这很有趣file(ref to it I found in here)。好难过
还有 glGrab,它使用 OpenGL 来抓取屏幕并且非常快。
所以我想知道我们能否在 Windows 和 Linux 上使用诸如 SDL 之类的 openGL 包装器通过 openGl 抓取桌面屏幕帧?
【问题讨论】:
标签: opengl cross-platform
所以我发现这很有趣file(ref to it I found in here)。好难过
还有 glGrab,它使用 OpenGL 来抓取屏幕并且非常快。
所以我想知道我们能否在 Windows 和 Linux 上使用诸如 SDL 之类的 openGL 包装器通过 openGl 抓取桌面屏幕帧?
【问题讨论】:
标签: opengl cross-platform
OpenGL 可以(轻松、快速、直接地)获取它所拥有的前/后缓冲区并且您有一个有效的上下文。
换句话说:没有。
桌面不属于 OpenGL。在Windows下,pre-Vista下由驱动管理,Vista/7下由窗口管理器管理。您需要在此处使用 BitBlt 函数,它既不便携,也不快速。
在 Linux 下,桌面至少有时可能确实归 OpenGL(合成窗口管理器)所有,但您没有相应的上下文句柄。
如果您可以将您的需求从“桌面”减少到“我的窗口内容”,那么一切都会变得超级简单。最简单的情况是一个函数调用,如果你想用 DMA 异步做的话,还要多 3-4 个。
【讨论】:
PFD_SWAP_EXCHANGE(或任何等效的X),否则没有理由说明任何一个窗口的缓冲区都应该与帧缓冲区有任何关系。