- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们有一个基于 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/
与my other question相关,我正在尝试渲染分割蒙版以启用对象拾取。但是我无法达到预期的结果。 选项 1 根本不起作用。我无法检索颜色附件 1 的内容,也无法检查它是否存在(我仅使用 na
我只是想知道 Qt 上的 QOpenGLWidget(我使用的是 5.4 版)是否可以在没有子类化的情况下使用。 在 Qt Creator 表单编辑器中,有一个 Display 小部件可以插入到名为“
以前我用 opengl 创建 qt 应用程序有困难,我总是设法用 SDL 或 glfw + glew 创建一个纯 opengl 应用程序。 但我按照大家在视频中所做的程序,创建了一个派生自 QOpen
我正在使用 Qt 和 OpenGL 开发 3D 应用程序。该应用程序由 QMainWindow 和 QOpenGLWidget 作为中央小部件和 QML UI 作为停靠小部件组成。我意识到用户输入和
我在 QMainWindow 实例 w 中嵌入了一个 QOpenGLWidget。编译正常。但是在调试时,程序在 w.show() 处崩溃。 错误对话框显示: Exception thrown at
我正在尝试使用四边形作为纹理,使用 QOpenGLWidget 渲染一个简单的二维图像。但无论我尝试什么,我总是得到一个黑盒子。 我看了很多教程,我有一个像这样的简单像素缓冲区 uchar* m_pD
你是我解决这个问题的最后手段,因为我没有想法。所以首先,我已经完成了一些 openGL 的工作,但没有使用 Qt 库。 由于 Qt Android 编译器,我必须使用 Qt 库来完成它,所以我别无选择
我对QOpenGLWidget和它的背景颜色有一点小问题。。当我想使用QPainter在我的自定义QOpenGLWidget上创建半透明的RECT时,有两种不同的结果:。以下是QPainter的代码示
我想将第二个渲染目标添加到 QOpenGLWidget 的默认帧缓冲区。 原因是我想通过将分割掩码渲染到 gl_FragData[1] 来实现对象拾取并检查用户是否击中对象。不幸的是,您只能从小部件中
我正在尝试使用 QOpenGLWidget 来显示一些图像,而不是使用 QLabel。但我对如何做到这一点感到有点困惑。 为了让小部件完成工作,我知道我需要重新实现 initializeGL() 方法
我有一个隐藏的 QOpenGLWidget(Qt 5.4.2,不是 QGLWidget),我想基本上不断地执行grab()或grabFramebuffer()来获取其内容(并将其写入磁盘)。该小部件在
我正在尝试编写一个使用 QOpenGLWidget 的 C++ 应用程序,但是 Qt Creator 在这一行给出了“‘QOpenGLWidget’文件未找到”错误: #include 文档说 QO
我正在尝试使用 QOpenGLWidget 而无需子类化。 当我尝试在 QOpenGLWidget 的方法或信号之外进行 OpenGL 调用时,似乎什么也没有发生。例如,尽管我设置了 glClearC
你好,我有一个基于 Qt 使用 QOpenGLWidget 的应用程序。在 OpenGL 小部件(在我的代码中名为 oglwidget)中,我使用 opengl 函数绘制网格和线条。然后我使用 QPa
我想解决我仍在处理的问题..那就是在不同的顶级窗口中使用共享着色器程序等同时渲染 2 个 QOpenGLWidgets。 我的第一次尝试是使用一个上下文,但没有成功。 目前 QOpenGLWidget
我一直在使用带有 QOpenGLWindow 的着色器文件并使用版本 330 着色器,一切正常。但是想要切换为 Widget 以便能够将其停靠在我的应用程序主窗口中。从那以后,我一直在努力获得正确的上
我们有一个基于 QWidget 的应用程序,它以前使用 QWindow 进行 OpenGL 渲染。为了在我们的应用程序中适应该窗口,我们必须使用 QWidget QWidget::createWind
我正在尝试使用 QOpenGLWidget 在 Qt 内部使用 OpenGL,但我很难找到任何相关示例。我是 OpenGL 的新手,所以我想学习如何使用它,但我发现的教程似乎在 QOpenGLWidg
我想在 QOpenGLWidget 上绘制文本标签。我尝试使用 QPainter 来完成此任务,但没有成功 - 文本看起来很丑陋且没有抗锯齿。它在 Qt OpenGL/2dpainting 示例中看起
调试时的确切崩溃是: The inferior stopped because it triggered an exception. Stopped in thread 0 by: Exception
我是一名优秀的程序员,十分优秀!