QOpenGLWidget with QApplication?
QOpenGLWidget with QApplication?
我们有一个基于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问题:具有共享OpenGL上下文的QOpenGLWidget?
这个问题的答案并没有解决我的问题,因为我们使用的是QApplication,而不是QGuiApplication,因为这是一个基于QWidget的应用程序。QGuiApplicationPrivate::init()
从不被调用,并且QOpenGLContext::globalShareContext()
返回空指针,因为它没有被初始化。
不幸的是,我无法等待QOpenGLWidget::initializeGL()
被调用来初始化QT管理的OpenGLContext
,因为我们已经在各种类上拥有大量OpenGL资源,在此之前尝试进行初始化。
其他人遇到过同样的问题吗?
有什么建议吗?
我在这里做一些猜测工作。
可能OpenGL默认为ANGLE。您以前的应用程序OpenGL调用是特定于平台的OpenGL API。
尝试将以下属性设置为QApplication
对象。
appObject->setAttribute(Qt::AA_UseDesktopOpenGL, true);
然后尝试调用
QOpenGLWidget::makeCurrent();
如果仍然无法正常工作,请为桌面OpenGL配置QT库。
configure -opengl desktop
下面的链接为您提供了有关OpenGL的Qt方法的一些信息。http://doc.qt.io/qt-5/windows-requirements.html
输入评论,如果这对你没有帮助,会删除答案。
- Problems with std::cin.fail()
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- Boost.TEST with CLion: "Test framework quit unexpectedly"
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Issues with Win32 ReadProcessMemory API
- Qt with WinAPI MouseProc
- [[maybe_unused]] with structured_binding?
- Issue with WriteProcessMemory
- OpenCV RTP-Stream with FFMPEG
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- std::adjacent_difference with std::chrono time_point
- DLL Made with CMake 使程序崩溃
- QtCreator with C 库中的链接器问题
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- specialized std::default_delete with QQmlComponent
- VS2019 - Sudo Remote Debugging on Linux with Cmake project
- Inference pytorch C++ with alexnet and cv::imread image
- Pybind11: init<> with lambda
- QOpenGLWidget with QApplication?