QMainWindow菜单栏:OpenGL触发的功能导致GL上下文问题
QMainWindow menu bar : OpenGL triggered function causes GL context issue
我有一个QGLWidget作为QMainWindow的中心小部件。它初始化GL上下文,并在其paintGl函数中进行draw调用。在QMainWindow的菜单栏中,我有一个导入文件按钮,它触发一个函数,该函数只有在QGLWidget使用initializeGL函数完成时才运行。这个导入文件按钮调用应该将3d对象的顶点转移到GL缓冲区,这似乎很好。
然而,当QGLWidget调用其绘制函数时,我收到一个错误的访问错误,在调试模式下打开了以下行:
Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr));
d_ptr->DrawArrays(mode, first, count); //exc_bad_access
如果我不是从菜单中的导入文件按钮而是直接从QGLWidget的initializeGl函数触发我的文件导入函数,那么一切都很好。
可能是什么问题?如果你需要进一步的信息,请告诉我。
我发现
每次paint函数或initializeGL函数运行时,它们都会自动调用makeCurrent()函数,使QGLWidget的gl上下文在当前线程中成为当前上下文。即使QMainWindow与QGLWidget在同一线程中运行,但绕过QGLWiget类并因此省略makeCurrent()函数会导致我的"文件导入"函数中的OpenGl函数在与QGLWidget不同的上下文(或空上下文)中运行。
相关文章:
- #为""定义宏;静态";针对不同的上下文
- 与互斥锁相比,旋转锁可以保证上下文切换
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 错误"Could not find Boost"(缺少:上下文标头)
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 安排带有上下文的协同程序
- 我的文件无法正常工作,无法从C++文件中读取上下文
- Visual Studio 19-17 库兼容性根据 GL 标志
- DCMTK 了解"DIMSE 没有有效的演示上下文 ID"错误
- 识别安卓中意外的 GL 上下文丢失
- Android GL没有当前上下文
- 在QT中创建RAW GL上下文
- GL 上下文销毁
- QMainWindow菜单栏:OpenGL触发的功能导致GL上下文问题
- 设置 GL 上下文时'framebuffer'的目的是什么?
- glewInit() 失败与 "Missing GL version" , SDL2 OpenGL 上下文, cygwin 编译器