我正在尝试创建一个NSOpenGLContext,初始化我的渲染引擎,然后使用第一个上下文中的share参数创建新的NSOpenGLContexts。这不起作用,在我继续之前,上下文之间究竟分享了什么?文档对此有点了解:
共享上下文共享在启动共享之前和之后创建的所有纹理对象,显示列表,顶点程序,片段程序和缓冲区对象。对象的状态也是共享的,但不是其他上下文状态,例如当前颜色,纹理坐标设置,矩阵和光照设置,光栅化状态和纹理环境设置。
当我创建我的第一个NSOpenGLContext时,我初始化我的渲染引擎,它会进行以下类型的调用:
其中大部分都是针对三种类型的任务 - 创建顶点和着色器程序,存储对attrib的引用和程序中的统一位置,创建顶点数组以及绑定一些纹理。
您是否希望所有这些项目在不同情境中共享?
答案 0 :(得分:4)
不跨上下文共享函数调用。只有对象。并且只有一些对象。
通常,共享的对象是那些显然无法在另一个上下文中重新创建的对象。要么存储大量数据,要么设置时间相对较长。
如果需要列表,则共享以下对象:
未共享的重要对象:
共享对象意味着它维护整个上下文中的所有状态。因此,如果您从一个上下文修改状态,您将在另一个上下文中看到它。但是,这也意味着如果您使用多个线程,则必须同步对共享GL对象的访问权限。否则可能会出现种族条件和其他不良情况。