gpt4 book ai didi

c++ - 如何共享 OpenGL 上下文或数据?

转载 作者:太空狗 更新时间:2023-10-29 20:41:33 27 4
gpt4 key购买 nike

我需要在应用程序中的所有 OpenGL 小部件之间共享数据(纹理、顶点缓冲区...)。

以下代码无效:

我发现一些解决方案有一个主要的 QGLWidget,而其他解决方案是使用这个主要小部件构建的。不幸的是,我不能使用这种方法,因为我所有的 QGLWidget 都是平等的,而且几乎可以肯定第一个(主要)创建的 QGLWidget 会先于其他 QGLWidget 被销毁。

可能的方法:

  • 所有 QGLWidgets 之间的单一共享 OpenGL 上下文
  • 不工作:只有一个 QGLWidget 被正确渲染,其他的表现得像没有渲染一样,损坏/随机数据
  • 除第一个之外的每个 QGLWidget 构造错误:

    QGLWidget::setContext: Context must refer to this widget

另一种方法:

  • 主 OpenGL 上下文并为每个 QGLWidget 创建子上下文
  • 不工作:context->isSharing() 返回 false
  • 我用于上下文创建的代码,context1context2 随后传递给 QGLWidgets 的构造函数:

    QGLContext *mainContext = new QGLContext(format), *context1, *context2;
    mainContext->create();
    context1 = new QGLContext(format);
    context1->create(mainContext);
    context2 = new QGLContext(format);
    context2->create(mainContext);
    cout << mainContext->isSharing() << " " << context1->isSharing() << endl;

最佳答案

关于第一种方法,您不是在设置共享,而是试图强制将相同的上下文用于不同的 QGLWidgets。如上所述,这是错误的,不会起作用。

相反,正常创建 QGLWidgets 并在创建其他 QGLWidget 时在 shareWidget 参数中传递第一个 QGLWidget。通过这种方式,您将为每个 QGLWidget 获得一个单独的上下文,但它们都将与第一个 QGLWidget 的上下文共享(因此彼此共享)。参见 http://qt-project.org/doc/qt-4.8/qglwidget.html#QGLWidget

在其他小部件之前销毁第一个小部件应该不是问题,因为共享对象将一直存在,直到任何共享上下文都处于事件状态。

关于c++ - 如何共享 OpenGL 上下文或数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20955669/

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