用栅栏同步在OpenGL对象(Using fence sync objects in OpenGL)

2019-08-17 05:33发布

我试图寻找,在那里同步对象可以在OpenGL中使用场景。 我的理解是,一旦投入GL命令流同步对象(使用glFenceSync())将在所有的GL命令的执行和实现信号。 如果同步对象的同步原语,为什么我们不能手动信号呢? 凡正是这种功能可以帮助程序员GL?

是以下情况下正确的?

Thread 1 :

Load model
Draw()
glFenceSync()

Thread 2 :

glWaitSync();
ReadPixels
Use data for subsequent operation.

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

Answer 1:

围栏与其说意味着同步线程,但要知道,当asynchronus操作完成。 例如,如果你做一个glReadPixels到一个像素缓冲区对象(PBO),你可能想知道,那读已经完成,之前,你甚至尝试读取或映射PBO到客户端的地址空间。

如果你做一个glReadPixels与公益为目标,呼叫将立即返回,但数据传输可能确实需要一些时间。 这就是围墙派上用场。



文章来源: Using fence sync objects in OpenGL