我正在尝试寻找可以在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?
答案 0 :(得分:9)
Fences并不是要同步线程,而是要知道,当异步操作完成时。例如,如果对像素缓冲区对象(PBO)执行glReadPixels
,则在尝试从PBO读取或将PBO映射到客户端地址空间之前,您可能想要知道已完成读取。 / p>
如果您以PBO为目标进行glReadPixels
,则呼叫将立即返回,但数据传输可能确实需要一些时间。这就是围栏派上用场的地方。