Objective c 两个NSOpenGLContext之间究竟共享了什么?

Objective c 两个NSOpenGLContext之间究竟共享了什么?,objective-c,macos,opengl,nsopenglview,Objective C,Macos,Opengl,Nsopenglview,我正在尝试创建一个NSOpenGLContext,初始化渲染引擎,然后使用第一个上下文中的share参数创建新的NSOpenGLContext。这不起作用,在我继续之前,上下文之间到底共享了什么?文档对此有一点说明: 共享上下文共享在启动共享之前和之后创建的所有纹理对象、显示列表、顶点程序、片段程序和缓冲区对象。对象的状态也是共享的,但不是其他上下文状态,例如当前颜色、纹理坐标设置、矩阵和照明设置、光栅化状态和纹理环境设置 当我创建第一个NSOpenGLContext时,我初始化我的渲染引擎,它

我正在尝试创建一个NSOpenGLContext,初始化渲染引擎,然后使用第一个上下文中的share参数创建新的NSOpenGLContext。这不起作用,在我继续之前,上下文之间到底共享了什么?文档对此有一点说明:

共享上下文共享在启动共享之前和之后创建的所有纹理对象、显示列表、顶点程序、片段程序和缓冲区对象。对象的状态也是共享的,但不是其他上下文状态,例如当前颜色、纹理坐标设置、矩阵和照明设置、光栅化状态和纹理环境设置

当我创建第一个NSOpenGLContext时,我初始化我的渲染引擎,它进行以下类型的调用:

  • GlgenTexture、glActiveTexture、glBindTexture
  • 格伦纳
  • glUseProgram,GLGetAttriblLocation,glGetUniformLocation
  • glUniform1i,glUniform3f
  • GLGEnVertexArrayApple,glBindVertexArrayAPPLE,glBindBuffer
  • GLVertexAttribute指针,GlenableVertexAttribute数组
其中大多数用于三种类型的任务:创建顶点和着色器程序、在程序中存储对属性和统一位置的引用、创建顶点数组和绑定一些纹理


您希望所有这些项都在上下文中共享吗?

函数调用不会在上下文中共享。只有对象。只有一些物体

通常,共享的对象是那些显然禁止在另一个上下文中重新创建的对象。要么是因为存储了大量数据,要么是因为设置时间相对较长

如果需要列表,将共享以下对象:

  • 显示列表
  • 质地
  • 渲染缓冲区
  • 缓冲区对象
  • 着色器和程序
未共享的值得注意的对象:

  • 顶点数组对象(位于其中的缓冲区对象是共享的,但对象本身不是)
  • 帧缓冲区对象(与VAO一样,仅共享其中的内容)
共享的对象意味着它在上下文中保持所有状态。因此,如果您从一个上下文修改状态,您将在另一个上下文中看到它。但是,这也意味着如果使用多个线程,则必须同步对共享GL对象的访问。否则,比赛条件和其他不良情况可能会发生