是否可以检查两个现有的 GL 上下文是否共享资源?
Posted
技术标签:
【中文标题】是否可以检查两个现有的 GL 上下文是否共享资源?【英文标题】:Is it possible to check if or not two existing GL contexts are sharing resources? 【发布时间】:2016-09-08 14:59:05 【问题描述】:似乎这个问题很少见。刚上网查了一下,没找到答案。
【问题讨论】:
这种情况很少见,因为一般来说,用户没有一对 OpenGL 内容,除非他们知道它们来自哪里。由于大多数用户创建他们的上下文或告诉其他人这样做。 我想我的情况也很少见。我在 GL 上下文(比如 A)下拥有(编译和链接)一堆着色器。一些着色器可以被各种其他客户端 GL 上下文使用。不幸的是,我不知道每个客户端 GL 上下文是否与 A 共享,因为 wglShareLists() 由客户端代码调用。所以,我不知道客户端是否可以重用编译链接着色器。 如果您的客户创建了上下文 A,那么您的客户也必须创建了上下文 B。因此,您的客户应该告诉您这两个上下文是否在一个共享组中或不是,因为你的客户是知道这件事的人。 是的,我知道让客户跟踪共享关系是可行的。不幸的是,它似乎很昂贵,因为我们在客户端有 许多 其他上下文而不是 B,而在我们的遗留代码中,这种跟踪机制不存在。我想知道是否有一些 OpenGL/wgl 调用可以提供帮助。 OpenGL 必须在后台跟踪这种关系,对吧? 你可以做一些丑陋的事情,比如在一个上下文中创建一个对象,然后检查它是否存在于另一个上下文中。为了安全起见,请检查它之前是否不存在。 【参考方案1】:上下文共享是 GLX、WGL、EGL 或类似软件提供的可选功能。严格来说,OpenGL 不能查询任何关于共享上下文的信息,因为它不需要任何用于共享上下文的接口。该规范确实提到了围绕共享上下文的某些行为,但仅此而已。
对于 GLX、WGL 和 EGL,无法查询上下文是否共享。
Reto 的评论建议在一种情况下做某事,看看它在另一种情况下是否有效果。
如果您可以控制构建环境,您可以“挂钩”用于共享上下文的操作,注册事件,然后调用真正的操作。
【讨论】:
以上是关于是否可以检查两个现有的 GL 上下文是否共享资源?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 Qt 的***窗口之间使用相同的 OpenGL 上下文?