【发布时间】:2021-01-03 01:49:23
【问题描述】:
我的 opengl 应用程序基于经典的 Qml 架构:
- 一个 QQuickFramebufferObject 实例(我的观点)
- 一个 QQuickFramebufferObject::renderer(我的渲染器)。
备注:OpenglContext 是共享的(Qt::ApplicationAttribute::AA_ShareOpenGLContexts)
这个渲染器由几个 QOpenGLFunctions_3_3_Core 实例组成。
其中一个正在处理纹理。
纹理在 Renderer::render() 方法内部初始化,并在其中销毁。
当我试图关闭我的应用程序时,视图被删除但我的渲染器没有被删除,然后应用程序没有关闭。
当我尽可能减少代码时,问题似乎是因为:
tex=new QOpenGLTexture(图像); ...
当我移动到另一个 QOPenGlTExture ctor 时:
tex=new QOpenGLTexture(QOpenGLTexture::Target2D); // 第 1 行 tex->setMinificationFilter(QOpenGLTexture::Linear); // 第 2 行 ....
启用第 2 行时会出现问题。
如果我更改为原始 opengl 函数(非 DSA),例如:
glGenTextures(1, &id); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, id);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 图像宽度(), img.高度(), 0, GL_RGBA, GL_UNSIGNED_BYTE, img.bits()); ...
效果很好。
备注:显示始终正确:纹理使用正确,但问题仅与渲染器销毁失败有关。
谢谢大家
【问题讨论】: