egl:使用共享上下文时共享的是什么

Dea*_*ean 1 opengl-es egl

在 EGL 中,有shared context.

当上下文(由第一个线程创建)被共享(到第二个线程)时,第二个线程可以使用哪些资源?

是纹理、缓冲区、帧缓冲区、渲染缓冲区还是其他对象?

第二个问题:

如果第一个线程创建了纹理(句柄为 2)并且其上下文被共享给第二个线程。在第二个线程中,当我调用 glGenTextures. 它会给出一个句柄也是2的纹理吗(在这种情况下,它将与共享上下文中的纹理发生冲突)。

sol*_*xel 7

一般来说,批量数据资源是共享的:

  • 纹理
  • 缓冲器
  • 渲染缓冲区
  • 着色器/着色器程序

纯状态资源是上下文本地的:

  • 上下文设置是上下文本地的
  • 顶点数组对象(这个通常会让人感到惊讶)
  • 帧缓冲区对象(这个通常会让人感到惊讶)

需要注意的几点:

  • 应用程序必须手动确保线程之间的同步。如果一个线程正在修改某些纹理数据,而另一个线程在绘制中使用它,那么您可能会在纹理数据仍在更新时对其进行快速读取。
  • 与数据资源对象关联的状态(例如纹理采样器状态)仅在上下文之间弱共享;仅当资源绑定在上下文 A 中时,才会(重新)获取由上下文 B 修改的状态设置。上下文 A 中的状态设置将继续反映资源绑定时上下文 A 获取的旧值;仅当上下文 A 中发生(重新)绑定已修改资源时,上下文 B 所做的后续编辑才会在上下文 A 中可见。

如果第一个线程创建了纹理(句柄为 2)并且其上下文被共享给第二个线程。在第二个线程中,当我调用 glGenTextures. 它会给出一个句柄也是2的纹理吗(在这种情况下,它将与共享上下文中的纹理发生冲突)。

不,ID 在共享组中显然必须是唯一的,否则将无法工作。