gpt4 book ai didi

c++ - QOpenGLWidget 与 QApplication?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:21:08 25 4
gpt4 key购买 nike

我们有一个基于 QWidget 的应用程序,它以前使用 QWindow 进行 OpenGL 渲染。为了在我们的应用程序中适应该窗口,我们必须使用

QWidget QWidget::createWindowContainer(QWindow);

以前我们只使用外部 Qt OpenGL 库进行渲染。

我们希望从使用 QWindow 切换到某种 QWidget 以与触摸手势兼容,并且通常与我们的应用程序的其余部分具有更好的整体兼容性。最新推荐的 OpenGL 兼容 QWidget 似乎是 QOpenGLWidget,所以我们正在尝试使用它。

glContext 是我们自己管理的 OpenGLContext。

现在的问题是QOpenGLWidget不是QSurface,所以我不能调用

glContext->makeCurrent(this);

使上下文在我的自定义 QOpenGLWidget 上成为当前上下文,就像我们以前使用自定义 QWindow 和我们自己的 OpenGLContext 一样。

如果我尝试使用 QOpenGLWidget::makeCurrent(); 那么这会使用错误的上下文并尝试使用一些神奇的 QT 处理的上下文或我不理解的东西。

结果是在我们尝试调用时创建了我们的 OpenGLContext

glFunctions = glContext->versionFunctions<QOpenGLFunctions_3_3_Core>();
if(!glFunctions->initializeOpenGLFunctions())
printf("Could not initialize OpenGL functions.");

它总是无法初始化 OpenGL 函数。

我一直在阅读我能找到的关于这个主题的所有其他资源,并遇到了这个类似的旧 Stack Overflow 问题: QOpenGLWidget with shared OpenGL context?

该问题的答案并没有解决我的问题,因为我们使用的是 QApplication,而不是 QGuiApplication,因为这是一个基于 QWidget 的应用程序。QGuiApplicationPrivate::init() 永远不会被调用并且 QOpenGLContext::globalShareContext() 返回一个空指针,因为它没有被初始化。

不幸的是,我等不及要调用 QOpenGLWidget::initializeGL() 来初始化 QT 管理的 OpenGLContext,因为我们已经拥有各种类的大量 OpenGL 资源 < em>尝试在此之前进行初始化。

有没有人遇到过同样的问题?

有什么建议吗?

最佳答案

我在这里做一些猜测工作。

可能您的 OpenGL 默认为 ANGLE。您之前的应用程序 OpenGL 调用是平台特定的 OpenGL API。

尝试将以下属性设置为您的 QApplication 对象。

appObject->setAttribute(Qt::AA_UseDesktopOpenGL, true);

然后尝试调用

QOpenGLWidget::makeCurrent();

如果仍然无法正常工作,请为桌面 OpenGL 配置您的 QT 库。

configure -opengl desktop

以下链接为您提供了有关 Qt OpenGL 方法的一些信息。 http://doc.qt.io/qt-5/windows-requirements.html

发表评论,如果这对您没有帮助,将删除答案。

关于c++ - QOpenGLWidget 与 QApplication?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47058621/

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