Qt 5.9 - 由于不推荐调用 glLoadIdentity 导致 0x0 异常
Posted
技术标签:
【中文标题】Qt 5.9 - 由于不推荐调用 glLoadIdentity 导致 0x0 异常【英文标题】:Qt 5.9 - Exception at 0x0 due to deprecated call of glLoadIdentity 【发布时间】:2017-08-12 22:10:48 【问题描述】:我有一个同学写的以下代码(我们正在做一个项目):
//inside cqtopencvviewergl.cpp
void CQtOpenCVViewerGl::resizeGL(int width, int height)
makeCurrent();
glViewport(0, 0, (GLint)(width), (GLint)(height));
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, -height, 0, 0, 1);
glMatrixMode(GL_MODELVIEW);
recalculatePosition();
emit imageSizeChanged(mRenderWidth, mRenderHeight);
updateScene();
根据调试器,glLoadIdentity()
的调用导致Exception at 0x0, code: 0x0000005
在我的情况下为C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe
。
我知道该功能已被弃用。但我对所有关于我应该怎么做的信息来源感到非常困惑。所以我会帮助你克服迷失方向,希望你能帮助我......
根据this 的回答,出现异常是因为使用的函数已被弃用。但问题有所不同,因为我(或我们)包含的 openGL 完全不同:
在cqtopencvviewergl.cpp
的顶部,我们包含以下内容:
#include "include/Gui/cqtopencvviewergl.h"
#include <QOpenGLFunctions>
#include <opencv2/opencv.hpp>
#include <QPalette>
在cqtopencvviewergl.h
的顶部,我们包括:
#include <QOpenGLWidget>
#include <QOpenGLFunctions_2_0>
#include <opencv2/core/core.hpp>
所以我们使用 Qt 类来调用 openGL 函数。我查看了代码,似乎 Qt 自己处理了弃用。
同样根据this的回答Qt支持所有当前的桌面OpenGL版本。
根据this 提问者对问题How to replace following (deprecated) OpenGL functions? 的回答,Windows 离线安装程序默认是基于角度的。我使用离线安装程序...
根据 qt wiki 中的this 条目要使用 ANGLE 编译 Qt我必须安装 Direct X SDK。但是,如果我使用QOpenGLFunctions
和QOpenGLFunctions_2_0
,我怀疑我是否真的需要这个...
根据 wiki 条目,Direct X SDK
是 Windows SDK
的一部分,所以我也怀疑我已经拥有 ANGLE,因为我已经拥有一些 Windows SDK:
另外根据this 的文章我应该使用configure -opengl dynamic
ly 并且因为我使用Windows 我试图找出在哪里调用configure
并在this 文章中找到configure.bat -opengl desktop
。所以想运行configure.bat -opengl dynamic
,但我在C:\Qt\Qt5.9.1
目录中的任何地方都找不到configure.bat
...
我使用以下 Qt 工具包:
我是唯一一个(项目中的 6 人)有这个问题的人。通常我的问题更准确,但我在这里迷路了。我该怎么办?
【问题讨论】:
不应该是QOpenGLFunctions_2_0::glLoadIdentity()
吗?看起来你是在直接调用 opengl 函数。
@JornVernee 不,电话会转到QOpenGLFunctions_2_0::glLoadIdentity()
...
停止使用兼容 OpenGL 的 ANGLE。如果你想要旧的东西,你必须使用 real OpenGL 实现,而不是 ANGLE 的东西。
【参考方案1】:
嗯,解决方法很简单……
根据this的文章加载机制可以通过QT_OPENGL
环境变量和以下应用属性进行配置...
所以我添加了QT_OPENGL
设置为desktop
作为系统环境变量:
控制面板 > 系统 > 高级系统设置 > 环境变量
我确定我的电脑讨厌我……干杯!
【讨论】:
以上是关于Qt 5.9 - 由于不推荐调用 glLoadIdentity 导致 0x0 异常的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 发布 v8.0.0 正式版;Qt 5.9 正式发布,长期支持版本 | 软件周刊
Node.js v8.0.0 正式发布;Nginx 1.13.1 发布;Qt 5.9 正式发布
anaconda安装出现conda.execute(700): An error occurred while installing package ‘defaults::qt-5.9解决办法.7-