首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消分配由OpenGL创建的QGLWidget上下文

取消分配由OpenGL创建的QGLWidget上下文
EN

Stack Overflow用户
提问于 2014-06-19 19:08:20
回答 1查看 998关注 0票数 1

如果我创建一个QGLWidget,然后使用glGenTextures、glTex2DImage等工具分配自己的纹理,那么当我删除这个小部件时,所有的纹理数据会被清除吗?(此外,我还将拥有共享的小部件,这些小部件也将被删除)。

我查看了析构函数的源代码,它看起来像是在删除上下文,我认为它也将清理我使用该上下文生成的任何纹理。

https://qt.gitorious.org/qt/qt/source/ca5b49a2ec0ee9d7030b8d03b561717addd3441f:src/opengl/qgl.cpp#L3409

只是想确保万一我错过了什么

EN

回答 1

Stack Overflow用户

发布于 2014-06-19 20:57:57

不,只有当使用它的对象在中没有绑定共享它的上下文的任何时,纹理存储才会被释放。此外,它不是仅仅因为一个上下文被破坏就被隐式释放的。您在所有共享上下文之间共享相同的对象名称空间,因此不可能允许发生这种情况(共享组中的所有上下文都必须销毁)。

每个上下文都维护自己的绑定纹理集,因此如果您在context AB中绑定纹理1,则在您还删除(或从上下文BE 211)上下文中删除(或从上下文B中取消绑定)之前,无法释放纹理。这种行为也适用于调用glDeleteTextures (...)

该函数将隐式解除绑定从当前(调用)上下文传递的纹理,但在任何其他上下文中未绑定之前,内存是不允许释放的。唯一会立即发生的事情是纹理名称立即可重用,并可能通过随后对glGenTextures (...)的调用返回。

长话短说,在您的示例中,内存最终将被释放(您声称要销毁上下文中的所有)。当您破坏第一个上下文时,它不一定会立即被释放--必须首先满足前面描述的其他条件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24314490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档