查看: 1799|回复: 9

osg如何释放一个纹理

[复制链接]

该用户从未签到

发表于 2013-5-26 01:54:54 | 显示全部楼层 |阅读模式
最近做的工程需要不停的读大纹理生成图像。进行若干次后,纹理就不正常了,要不全白,要不是之前的某张纹理,非常怀疑是纹理没有被释放,把显存占满了。以前在opengl中直接glDeleteTextures就行了,现在课题组要求用osg,但总是对其行为模式不明白,现在连怎么删纹理都不知道了。。。请问有释放texture2d的方法么?

该用户从未签到

 楼主| 发表于 2013-5-26 02:20:02 | 显示全部楼层
哎,下了个gpuz看,好像也没满啊。。。。奇怪

该用户从未签到

发表于 2013-5-26 07:32:46 | 显示全部楼层
本帖最后由 liuzhiyu123 于 2013-5-27 08:26 编辑

dirtyTextureObject

该用户从未签到

 楼主| 发表于 2013-5-27 02:31:46 | 显示全部楼层
节点切换个十几次就会出问题:如果主线程生成节点的话程序就卡住不动了,如果是其他线程生成节点的话则节点incremcompileoperaton一直不返回,也就是新节点一直编译不通过。我的节点就是六个面搭的盒子,每个面都贴4096的纹理。出错时我用gpuz看的显存占用也就六七百m,我显卡有2g显存。请问这里面有什么可能的原因?是不是纹理池大小超限什么的。另外osg该如何释放纹理,上面那位说的太言简意赅了,osg里连个例子都没有,看来看去都是osg核心内部调用。

该用户从未签到

发表于 2013-5-27 08:27:50 | 显示全部楼层
您的 incremcompileoperaton 相关信息 是怎样设置的?   为何都需要例子?

该用户从未签到

 楼主| 发表于 2013-5-27 11:21:05 来自手机 | 显示全部楼层
liuzhiyu123 发表于 2013-5-27 08:27
您的 incremcompileoperaton 相关信息 是怎样设置的?   为何都需要例子?

就是一个compileset(loadedmodel),然后给他加一个releaseblockoncompilecompleate的回调。感觉还是纹理读太多的问题,程序蹦掉之前有出现过出现错误纹理的情况,就是有一个面贴成了其他面的纹理,他自己的纹理没读进来或是句柄被占用的感觉。

该用户从未签到

 楼主| 发表于 2013-5-27 15:56:01 来自手机 | 显示全部楼层
liuzhiyu123 发表于 2013-5-26 07:32
dirtyTextureObject

好像没有效果,跟踪着看了下,貌似从deletealltextureobjects才能走到gldeletetexture函数。但需要一个contextid作为参数,这是个参数是什么意思?

该用户从未签到

 楼主| 发表于 2013-5-27 16:03:33 来自手机 | 显示全部楼层
用graphicscontext的state的contextid放进去试了,蹦了。

该用户从未签到

 楼主| 发表于 2013-5-27 23:52:16 | 显示全部楼层
谁能救救我啊。。。。。要崩溃了。。。。为什么持续的读纹理生成节点,过一段时间就会出现纹理错误呢?

该用户从未签到

发表于 2013-5-30 20:49:37 | 显示全部楼层
您什么信息都没有提供,如何帮助您判断?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表