首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QOpenGLWidget和QApplication?

QOpenGLWidget和QApplication?
EN

Stack Overflow用户
提问于 2017-11-01 15:44:26
回答 1查看 1.2K关注 0票数 4

我们有一个基于QWidget的应用程序,它以前使用QWindow进行OpenGL呈现。为了在我们的应用程序中安装这个窗口,我们必须使用

代码语言:javascript
运行
复制
QWidget QWidget::createWindowContainer(QWindow);

以前,我们只使用Qt的外部OpenGL库来进行呈现。

为了与触摸手势兼容,我们希望从使用QWindow切换到某种类型的QWidget,并且总体上更好地与应用程序的其他部分兼容。最近推荐的OpenGL兼容QWidget似乎是QOpenGLWidget,所以我们尝试使用它。

glContext是我们自己管理的OpenGLContext。

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

代码语言:javascript
运行
复制
glContext->makeCurrent(this);

使上下文在我的自定义QOpenGLWidget上正常运行,就像我们以前使用自定义QWindow和我们自己的OpenGLContext一样。

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

结果是,在创建OpenGLContext之后,当我们尝试调用

代码语言:javascript
运行
复制
glFunctions = glContext->versionFunctions<QOpenGLFunctions_3_3_Core>();
if(!glFunctions->initializeOpenGLFunctions())
  printf("Could not initialize OpenGL functions.");

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

我已经阅读了我能找到的关于这个主题的所有其他资源,并遇到了一个类似的旧的堆栈溢出问题:QOpenGLWidget with shared OpenGL context?

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

不幸的是,我不能等待QOpenGLWidget::initializeGL()被调用来初始化QT托管的OpenGLContext,因为我们已经拥有了大量的OpenGL资源,这些类都试图在此之前进行初始化。

还有其他人遇到过同样的问题吗?

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2017-11-01 17:41:00

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

可能你的OpenGL默认为角。以前的应用程序OpenGL调用是特定于平台的OpenGL API。

尝试将属性设置为QApplication对象。

代码语言:javascript
运行
复制
appObject->setAttribute(Qt::AA_UseDesktopOpenGL, true);

然后试着打电话

代码语言:javascript
运行
复制
QOpenGLWidget::makeCurrent();

如果仍然没有工作,那么为桌面OpenGL配置您的QT库。

代码语言:javascript
运行
复制
configure -opengl desktop

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

发表评论,如果这对你没有帮助,就会删除答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47058621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档