我正在制作一个 CAD 软件,它将为相似的视图创建不同的 OpenGL 上下文(如果它们没有显示相同的内容)。
我想在 OpenGL 上下文之间共享尽可能多的数据,尤其是 VBO 和着色器。
我想知道what我可以分享和how我分享它们,在一个跨平台方式并且可能使用普通的 OpenGL 3.2(无引擎)。
OpenGL 上下文唯一可以共享的就是对象。即便如此,“容器”对象无法共享。容器对象是其主要目的是附加其他对象的对象。具体来说,以下是容器对象:
- 帧缓冲区对象
- 顶点数组对象
- 变换反馈对象
- 程序管道对象
所有其他对象都可以共享。
共享对象是一项基于上下文的任务,通常作为创建上下文的一部分或之后立即完成。然而,由于这是在上下文本身上完成的,所以cannot是跨平台操作。 OpenGL只定义了上下文的行为,而不定义如何操作上下文对象。负责创建和管理上下文的特定于平台的 API 处理:GLX、WGL、EGL 等。
通常有两种处理方法。一种方法是上下文创建函数将另一个上下文作为参数;新创建的上下文将与给定上下文共享所有可共享对象。wglCreateContextAttribsARB
是 WGL 上下文创建函数,它需要一个上下文来与新上下文共享。
其他方法是在创建上下文后立即使用函数。该函数采用两个上下文并在它们之间共享对象。但是,您应该在创建上下文后立即使用这样的函数;您不想在目标上下文中创建可能与源中已有的对象发生冲突的对象。 WGL 有一个较旧的函数,wglShareLists,在上下文之间共享对象。我知道它只讨论显示列表,但它共享所有可共享对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)