我正在创建一个类似 CAD 的应用程序(基于 Qt),它将是一个多文档界面,每个文档将包含大约 5 个视口(源自 QGLWidget)。因此,我需要在整个应用程序中共享平面着色器,然后在每个文档(即 5 个视口)之间共享 3D 资源(存储为 VBO 的模型)。
我认为只要我共享着色器程序和 VBO GLuint 地址,所有内容都会自动工作 - 但事实并非如此。我认为因为每个视口/上下文在显卡上都有自己的地址空间,如果有人更了解请告知!
我希望在应用程序启动时编译着色器,但这被证明很困难,因为我需要一个有效的 QGLWidget 来预先使 OpenGL 进入有效状态。但由于我需要共享 QGLWidgets(通过它们的构造函数)以使它们共享资源,因此需要创建一个并shown在其他实例可以被实例化之前。但这是非常不切实际的,因为要同时向用户显示多个视图。
这一定比我想象的要容易,因为它几乎不是开创性的东西,但我真的很挣扎 - 谁能指出我正确的方向?
谢谢,卡姆
以下是常用 CAD/MDI 应用程序所做的事情:
wglShareLists
可用于共享 VBO、纹理、着色器等,而不仅仅是显示列表(共享 DL 是传统用法,因此称为函数名称)。
我不记得您是否需要使用共享上下文创建资源,或者是否可以在任何上下文上创建它们。
如果您不在 Windows 上,请参阅glXCreateContext
。这应该会让你走上正轨。
Edit:
我看过Qt,看起来它是用成员抽象的QGLContext::create
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)