OSG垃圾收集机制(DeleteHandler)

本文探讨了OSG(OpenSceneGraph)中的垃圾收集机制,特别是如何通过DeleteHandler来避免未正确删除导致的图形渲染问题。当不再需要的对象不被及时清理,它们可能会在渲染过程中引发错误。因此,了解如何在OSG中正确请求和使用DeleteHandler至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++中最通用的删除对象的方法是delete,OSG 的智能指针也是采用这种方式来释放对
象的,不过由于OSG采用多线程更新/渲染的方式(这一点我们会在后面的日子中详细介绍),
这样做可能带来会某些隐患,想象这样一种情况:
1、场景某个的节点负责显示某种图形,它的工作一直很正常;
2、我们采用DrawThreadPerContext 或者CullThreadPerCameraDrawThreadPerContext 线
程模型,根据前一日中我们所知的,这两种模式中存在“上次的渲染工作与下次的更新工作
交叠”这一情形。
3、假设我们在更新工作中立即将这个节点删除,而上次渲染工作可能正要将这个节点

中的数据送往OpenGL 图形渲染管线,那么灾难就发生了……


看到这里,读者您一定已经想到了一种解决方案。对,就是在渲染后台也使用ref_ptr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值