查看: 1628|回复: 4

如何正确销毁GraphicContext?

[复制链接]

该用户从未签到

发表于 2009-4-20 18:01:10 | 显示全部楼层 |阅读模式
我参照OSG官方的MFC例子把osgViewer::viewer嵌入到了MFC中进行渲染,但是遇到的一个问题就是 当我第二次创建GraphicContext的时候就会出现内存访问异常。
和例子中一样,我在MFC的View中保存了一个cOSG类的指针。并且在程序刚开始的时候让用户选择一个文件进行渲染。我注意到在例子中使用GraphicContext的时候没有用ref_ptr来引用GraphicContext,而是直接用了一个普通指针。而创建GraphicContext实例的时候是调用了类工厂osg::GraphicsContext::createGraphicsContext,这是不是意味着也不需要自己手动的来销毁它(也没法儿销毁?)造成了我的MFC的view销毁以后它仍然存在,导致再次创建的时候出错?

如果是这样的话,应该用什么样的方法来销毁这个对象?

该用户从未签到

发表于 2009-4-20 19:56:10 | 显示全部楼层
为什么您会第二次创建GraphicContext?有什么特殊的需要吗

该用户从未签到

 楼主| 发表于 2009-4-21 11:04:37 | 显示全部楼层
事实上我正在用MFC做一个类似于OgreEdit的程序,支持同时打开多个文件进行编辑。因为我使用了MFC的文档-视图模型,这样在MFC程序中每次创建一个新文档的时候都会创建一个新的子窗口,也就是说有一个新的窗口句柄。这样的话以前创建的GraphicContext就不能重用了,必须得重新创建一个

不知道有什么解决方法么?

该用户从未签到

发表于 2009-4-21 11:13:14 | 显示全部楼层
这种异常恐怕不是销毁GraphicsContext的问题,而是多线程工作时产生的冲突问题。也许可以在这一过程中stopThreading()然后再startThreading()试一下

该用户从未签到

 楼主| 发表于 2009-4-24 10:09:30 | 显示全部楼层
发现问题所在了。我同时在使用2.6和2.8版本,我是跟着2.6中的例子写的代码,但是链接的确实2.8的库。改为链接2.6以后就没有再出现错误了

多谢array啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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