8

我正在尝试寻找可以在 OpenGL 中使用同步对象的场景。我的理解是,一旦将同步对象放入 GL 命令流(使用 glFenceSync() ),将在执行并实现所有 GL 命令后发出信号。如果同步对象是同步原语,为什么我们不能手动向它们发出信号?这个功能究竟在哪里可以帮助 GL 程序员?

以下情况是否正确?

Thread 1 :

Load model
Draw()
glFenceSync()

Thread 2 :

glWaitSync();
ReadPixels
Use data for subsequent operation.

这是否意味着除非在线程 1 中调用 glFenceSync(),否则我无法启动线程 2?

4

1 回答 1

9

栅栏不是为了同步线程,而是为了知道异步操作何时完成。例如,如果您对glReadPixels像素缓冲区对象 (PBO) 执行操作,您可能想知道读取已完成,甚至在您尝试从 PBO 读取或映射到客户端地址空间之前。

如果您glReadPixels以 PBO 为目标进行操作,则调用将立即返回,但数据传输确实可能需要一些时间。这就是栅栏派上用场的地方。

于 2013-02-28T14:26:08.560 回答