opengl - OpenGL 上下文之间可共享的内容以及如何启用共享

标签 opengl

我正在制作一个 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/

    相关文章:

    qt - 具有自定义帧缓冲区和多个渲染目标的 QOpenGLWidget

    c - OpenGL 如何与 GPU 通信?

    c++ - OpenGL 过剩 glTranslate glRotate glScale 矩阵

    c++ - Opengl 着色器 vec3 未更新

    java - JOGL GLU 使用抛出 GLException

    opengl - 曲面分割着色器和几何着色器之间的区别

    c++ - OpenGL 顶点着色器运行时问题(不使用 VBO 或纹理)

    linux - KDE 桌面效果中的 OpenGL 和 XRender 有什么区别?

    opengl - GLSL 顶点着色器取消渲染

    c++ - 计算着色器不会写入缓冲区