在OpenGL中使用fence同步对象

时间:2013-02-28 13:40:58

标签: opengl synchronization opengl-3

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

以下情况是否正确?

Thread 1 :

Load model
Draw()
glFenceSync()

Thread 2 :

glWaitSync();
ReadPixels
Use data for subsequent operation.

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

1 个答案:

答案 0 :(得分:9)

Fences并不是要同步线程,而是要知道,当异步操作完成时。例如,如果对像素缓冲区对象(PBO)执行glReadPixels,则在尝试从PBO读取或将PBO映射到客户端地址空间之前,您可能想要知道已完成读取。 / p>

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