Mat*_*ilk 8 c++ windows opengl mesa qt5
我需要在Windows 7的Qt5项目中使用OpenGL版本2功能(Qt是使用桌面OpenGL而不是ANGLE构建的).为了支持通过远程桌面运行应用程序,我想在必要时通过Mesa回退到软件渲染.我的计划是在启动时检查OpenGl版本.如果它是低,我在应用程序设置中设置一个标志,打印一条消息并终止该程序.当程序再次启动时,我可以读取标志并决定是否需要从Mesa而不是Windows的内置版本加载opengl32.dll.
为了实现这一点,我尝试通过设置/DELAYLOAD:opengl32.dll链接器标志然后使用SetDllDierectoryW([path to dir with Mesa's opengl32.dll])重定向dll查找来延迟加载opengl32.dll .不幸的是,这不起作用,因为内置版本的opengl32.dll在进入后就已经在内存中main(),因此SetDllDirectory没有任何效果.
Dependency Walker向我显示Qt5Gui.dll本身与opengl32.dll相关联,我怀疑这会破坏延迟加载.但是当我尝试延迟加载Qt5Gui.dll时,链接器由于导入的符号而失败"__declspec(dllimport) public: static struct QMetaObject const QWindow::staticMetaObject" (__imp_?staticMetaObject@QWindow@@2UQMetaObject@@B).我怎么知道怎么摆脱这个.
我真的需要OpenGL 2所以似乎无法使用Mesa进行软件渲染.但我无法想出延迟加载的替代方案.每当我想在硬件和软件渲染之间切换时更改PATH设置似乎不起作用,并且通过将Mesa的opengl32.dll移入或移出应用程序目录而进行切换不是一个选项,因为普通用户不应该具有所需的写入权限.
有没有办法让opengl32.dll的延迟加载与Qt5一起使用?
Qt5Gui 本身与 OpenGL 链接。如果您的应用程序能够延迟加载此库,您可以尝试在不使用系统路径的情况下调用 QCoreApplication::setLibraryPaths(),而是使用库的路径。
除此之外,您还可以调整 qt.conf 文件。在这里阅读: http: //qt-project.org/doc/qt-5/qt-conf.html
| 归档时间: |
|
| 查看次数: |
1009 次 |
| 最近记录: |