gpt4 book ai didi

qt - OpenGL资源共享策略

转载 作者:行者123 更新时间:2023-12-04 13:44:18 26 4
gpt4 key购买 nike

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

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

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

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

谢谢,凸轮

最佳答案

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

  • 他们创建了一个共享的环境,可以很好地共享资源。
  • 他们使用 wglShareLists在创建新的 OpenGL 渲染上下文以访问共享上下文的资源 ID 时。
  • wglShareLists可用于共享 VBO、纹理、着色器等,而不仅仅是显示列表(共享 DL 是传统用法,因此是函数名称)。

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

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

    编辑:

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

    关于qt - OpenGL资源共享策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4360665/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com