Sig*_*erm 8 c++ windows opengl qt4 windows-7-x64
情况
我正在开发使用Qt 4的32位应用程序,而我正在使用Windows 7 64位.
我的程序有主要的非OpenGL小部件,QGLWidget可以选择由用户打开.
问题:
当我创建它时QGLWidget,glGetVersion报告"1.1.0"(我的硬件支持OpenGL 4.3.0).因此,我需要的许多功能根本不起作用(很明显,因为它们在OpenGL 1中不可用).这个问题"有时"发生.
附加信息
如果我使用gDebugger启动程序,一切正常,glGetVersion返回"4.3.0",如预期的那样.添加此行:
QGLFormat::OpenGLVersionFlags flags = QGLFormat::openGLVersionFlags();
Run Code Online (Sandbox Code Playgroud)
在main()函数的开头也解决了这个问题.
该应用程序在WinXP 32位上运行良好.
我在2.3年前为这个应用程序编写了OpenGL子系统,使用它的人说他们在虚拟机(Win7或vista guest)上有类似的问题,但我不记得当时我是如何处理这个问题的.
OpenGL初始化
使用QGLWidget ,Qt 4执行OpenGL初始化,没有glew或额外的库.
程序中只有一个QGLWidget.确切地说,有一个派生自QGLWidget的类,它的初始化看起来像这样:
DisplayWidget::DisplayWidget(QWidget* parent)
: QGLWidget(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer), parent)
Run Code Online (Sandbox Code Playgroud)
系统配置:
操作系统:Windows 7 64位.
编译器:MSVC2008表示SP1.
Qt:Qt 4.8.1(使用MSVC2008从支持OpenSSL的源代码编译).Windows SDK:Windows Server 2008和.NET 3.5.GPU:GeForce 460 GTX
问题:
什么可能导致这个问题?
--update--
"魔法修复"(OpenGLVersionFlags)在完全重建后停止工作,现在应用程序不断初始化软件渲染器,即使使用gDebugger启动也是如此.
我机器上的所有其他OpenGL应用程序都可以正常工作并可以使用着色器.
我用最新的驱动程序.
有任何想法吗?
--update--
经过一些测试后,我发现谷歌chrome和steam客户端会影响所有使用OpenGL的Qt应用程序.
如果我打开谷歌Chrome和Steam,最终所有程序都将无法正常工作,将无法再获得硬件加速的OpenGL.
如果我关闭谷歌浏览器并保持蒸汽打开,每次第二次尝试启动硬件加速程序都将失败.
如果我关闭蒸汽和铬合金,那么每个程序启动都会成功.
为什么会发生这种情况?
--update--
我已经阅读了调试器输出,发现了一个非常有趣的事情:
'vdclient.exe': Loaded 'C:\Windows\SysWOW64\nvoglv32.dll'
First-chance exception at 0x777f47a5 (ntdll.dll) in vdclient.exe: 0xC0000005: Access violation reading location 0x05aa9000.
'vdclient.exe': Unloaded 'C:\Windows\SysWOW64\nvoglv32.dll'
Run Code Online (Sandbox Code Playgroud)
基本上,当加载nvoglv32.dll时,某些地方会出现"某事"(调试器不会对此事件做出反应,顺便说一下),系统决定卸载nvoglv32.dll.从它的名称来看它是nvidia系统/驱动程序组件,没有这个组件就没有硬件加速.
当opengl正常工作时,这部分日志如下所示:
'vdclient.exe': Loaded 'C:\Windows\SysWOW64\nvoglv32.dll'
'vdclient.exe': Loaded 'C:\Windows\SysWOW64\ntmarta.dll', Symbols loaded (source information stripped).
'vdclient.exe': Loaded 'C:\Windows\SysWOW64\Wldap32.dll', Symbols loaded (source information stripped).
'vdclient.exe': Loaded 'C:\Windows\SysWOW64\powrprof.dll', Symbols loaded (source information stripped).
The thread 'Win32 Thread' (0x1744) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x1740) has exited with code 0 (0x0).
'vdclient.exe': Unloaded 'C:\Windows\SysWOW64\powrprof.dll'
The thread 'Win32 Thread' (0x1748) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x174c) has exited with code 0 (0x0).
'vdclient.exe': Loaded 'C:\Windows\SysWOW64\uxtheme.dll', Symbols loaded (source information stripped).
Run Code Online (Sandbox Code Playgroud)
想法?
好吧,我放弃了。
我会将其标记为驱动程序错误或 Google Chrome 不兼容。
我将把这个怪癖|问题添加到项目的自述文件中,并确保即使模拟 OpenGL,应用程序也能正常工作(即不显示伪影)。
| 归档时间: |
|
| 查看次数: |
1000 次 |
| 最近记录: |