我正在制作一个 CAD 软件,它将为类似的 View 创建不同的 OpenGL 上下文(如果它们没有显示相同的东西)。
我想在它们之间共享尽可能多的 OpenGL 上下文数据,尤其是 VBO 和着色器。
我想知道什么 我可以分享和怎么样我在 中分享它们跨平台方式并可能使用普通的 OpenGL 3.2(无引擎)。
最佳答案
OpenGL 上下文唯一可以共享的东西是对象。即便如此,"container" objects无法共享。容器对象是主要目的是让其他对象附加到它们的对象。具体来说,以下是容器对象:
所有其他对象都可以共享。
共享对象是一项基于上下文的任务,通常作为上下文创建的一部分或紧接其后完成。但是,由于这是在上下文本身上完成的,因此不能跨平台操作。 OpenGL 只定义上下文的行为,而不定义如何操作上下文对象。负责创建和管理上下文的特定于平台的 API 处理:GLX、WGL、EGL 等。
通常有两种处理方式。一种方法是上下文创建函数将另一个上下文作为参数;新创建的上下文将与给定的上下文共享所有可共享的对象。
wglCreateContextAttribsARB
是 WGL 上下文创建函数,它接受一个上下文与新的共享。另一种方法是在创建上下文后立即使用函数。这个函数需要两个上下文并在它们之间共享对象。但是,您应该在创建上下文后立即使用这样的函数;您不想在目标上下文中创建可能与源中已有的对象冲突的对象。 WGL有an older function,
wglShareLists
,在上下文之间共享对象。我知道它只讨论显示列表,但它共享所有可共享的对象。
关于opengl - OpenGL 上下文之间可共享的内容以及如何启用共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55885139/