6

我正在创建一个类似 CAD 的应用程序(基于 Qt),它将是一个多文档界面,每个文档将包含大约 5 个视口(源自 QGLWidget)。因此,我需要在整个应用程序中共享我的平面着色器,然后在每个文档(即 5 个视口)之间共享 3D 资产(存储为 VBO 的模型)。

我想只要我分享着色器程序和 VBO GLuint 地址,所有这些都会自动工作 - 它不会。我认为因为每个视口/上下文在显卡上都有自己的地址空间,如果有人知道更好,请告知!

我希望在应用程序启动时编译着​​色器,但这证明很困难,因为我需要一个有效的 QGLWidget 才能让 OpenGL 预先进入有效状态。但是由于我需要共享 QGLWidgets(通过它们的构造函数)以让它们共享资源,因此需要在实例化其他的之前创建并显示一个。但这是非常不切实际的,因为要同时向用户显示多个视图。

这一定比我想象的要容易,因为它几乎不是开创性的东西,但我真的很挣扎——谁能指出我正确的方向?

谢谢,凸轮

4

1 回答 1

12

以下是通常的 CAD/MDI 应用程序正在执行的操作:

  • 他们创建了一个共享的环境,很好地服务于共享资源。

  • 它们wglShareLists在创建新的 OpenGL 渲染上下文以访问共享上下文的资源 ID 时使用。

wglShareLists可用于共享 VBO、纹理、着色器等,而不仅仅是显示列表(共享 DL 是传统用法,因此是函数名称)。

我不记得您是否需要使用共享上下文创建资源,或者是否可以在任何上下文中创建它们。

如果您不在 Windows 上,请参阅glXCreateContext。那应该让你走上正轨。

编辑:

我看过 Qt,它看起来像是用 member 抽象出来的QGLContext::create

于 2010-12-05T19:45:33.470 回答