首页 > 解决方案 > glFenceSync 可以跨线程或上下文边界使用吗?

问题描述

我可以在一个线程中创建一个 glFenceSync,然后在另一个线程中等待它吗?

或者

我可以在一个上下文中创建一个 glFenceSync 并在另一个上下文中等待它吗?

标签: openglopengl-es

解决方案


我可以在一个线程中创建一个glFenceSync,然后在另一个线程中等待它吗?

您可以调用的每个 GL 函数都要求您为正在调用的线程设置当前的 GL 上下文,并且 GL 上下文在任何时间点最多可以是一个线程。

从技术上讲,您的问题的答案仍然是“是”,因为您可以glFenceSync在一个线程上发出 a ,将上下文移动到另一个线程并gl[Client]WaitSync在那里调用 - 但这可能不是您的想法,我也没有请参阅这种模式的明显用例。

我可以在一个上下文中创建一个glFenceSync并在另一个上下文中等待它吗?

同步对象在 GL 中是可共享的,因此如果您创建共享对象的上下文,它们也将共享同步对象,并且规范明确允许等待另一个上下文的同步对象。实际上,甚至可以指定单个同步对象上可以有多个同时等待,并且当同步对象收到信号时,所有等待都将被解除阻塞(但以实现相关的顺序)。


推荐阅读