无法使用外部QOpenGLWidget创建的上下文
Cant use context made by external QOpenGLWidget?
调试时的确切崩溃是:
下级已停止,因为它触发了异常。线程0中的停止者:0x7fed96c6cda处的异常,代码:0x0000005:0x0处的读取访问冲突,标志=0x0。
然后异常指向下面代码中的这一行:
if(QOpenGLContext::currentContext()->isValid())
下面的代码足以为我重现这个异常。对QOpenGLWidget类进行子类化并在尝试访问上下文之前进行一次子类调用initializeGL()并不能解决问题。
#include <QApplication>
#include <QOpenGLWidget>
#include <QOpenGLContext>
#include <QDebug>
void initialize(QOpenGLWidget * renderArea)
{
renderArea->makeCurrent();
if(QOpenGLContext::currentContext()->isValid())
{
qInfo() << "Valid.";
}
}
int main(int argc, char *argv[])
{
QSurfaceFormat format;
format.setVersion(3,3);
format.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(format);
QApplication a(argc, argv);
QOpenGLWidget * glw = new QOpenGLWidget;
initialize(glw);
return a.exec();
}
我现在意识到了答案:你必须在事件循环开始后进行所有这样的opengl初始化。
一个固定的代码,其中"MainWindow"类在接收信号"onEventLoopStarted"时进行所有opengl初始化:
#include "mainwindow.h"
#include <QApplication>
#include <QOpenGLWidget>
#include <QOpenGLContext>
#include <QDebug>
#include <QTimer>
int main(int argc, char *argv[])
{
QSurfaceFormat format;
format.setVersion(3,3);
format.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(format);
QApplication a(argc, argv);
MainWindow w;
w.resize(512, 512);
w.show();
QTimer::singleShot(0, &w, SLOT(onEventLoopStarted()));
return a.exec();
//Window receives event and begins to initialize.
}
QOpenGLWidget
在首次显示小部件时初始化GL资源
因此,您可以在调用initialize()
之前添加glw->show()
。
相关文章:
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- Adobe Acrobat插件-在上下文菜单中创建子菜单项
- 由于某种原因,我无法创建 GLFW 上下文
- Zmq 上下文 - 我应该在新线程中创建另一个上下文吗?
- 如何创建一个版本的 boost::range::transform,该版本具有用于捕获上下文的额外参数
- lib OSMesa 屏幕外上下文创建在C++中失败,但仅在静态链接时失败
- 使用 GLUT/FreeGLUT 创建核心上下文?
- C++:如何创建一个临时对象,包含一个指针 - 常量或非常量,具体取决于上下文
- SetPixelFormat() 中的第三个参数对于 OpenGL 上下文创建有什么意义?
- 在新计算机上,ZMQ上下文套接字创建要慢得多
- Linux/QT-错误创建SSL上下文(错误:140A90C4 ..)
- 电子内部或外部方法创建自己的右键单击上下文菜单 - Windows
- 从cl_context创建 OpenCL 上下文,而无需获得所有权
- 无法使用外部QOpenGLWidget创建的上下文
- 使用WGL创建现代OpenGL上下文
- 在 Mac OS X 10.9 中使用 GLFW 创建 OpenGL 3.3 上下文
- SDL_net没有创建OpenGL上下文
- GLFW 无法创建 4.3 上下文
- 设备表示它可用,但无法在 OpenCL 中创建上下文
- 如何在列表框上右键创建上下文菜单