0

我创建了一个 CGRegisterScreenRefreshCallback(refreshCallback, NULL) 并在 refreshCallback 方法中获取已更改的矩形列表。

我正在使用 OpenGL glReadPixels 从 frameBuffer 获取矩形数据。

是否有更好的屏幕捕获方法,无论是否使用opengl,也可以使用OpenGL,我可以跳过逐像素读取吗?

我看过 glGetTexImage 和 glCopyTexSubImage2D。任何可以解释如何使用这些函数来获取更改的矩形数据的简单代码块都会非常有帮助吗?

4

2 回答 2

0

捕获线程-> HandlerThread

CaptureThread 运行 CGRegisterScreenRefreshCallback-> 回调通知处理程序线程矩形已更改 -> 如果需要,处理程序线程仅会询问矩形数据。

在这个阶段,我们将使用 glReadPixels 来读取矩形数据。

可以将其更改为任何更快的 API,该 API 可以仅从已更改的矩形中读取数据吗?这应该非常快,因为会有大量矩形将被更改并且会多次检查屏幕更新。

我们是否需要更改设计以使其更快?

于 2011-03-01T10:52:36.000 回答
0

回读像素的最佳方法是绑定一个像素缓冲区对象(GL_PIXEL_PACK_BUFFER),使用 glBufferData 和空数据指针(GL_STREAM_READ,重要!)对其进行初始化以保留内存,然后调用 glReadPixels。然后,在下一帧期间,即在交换缓冲区之后,(最好)glMapBuffer 或(或者)glGetBufferSubData。

这种技术确保 glReadPixels 不会阻塞,并且传输将以可能的最高传输速度异步进行,不会产生不必要的额外副本。

于 2011-02-28T21:25:43.717 回答