OSG提供了一种自动管理内存的机制,这种机制涉及到两个类:osg::ref_ptr类 和 osg::Referenced类 二.osg::Reference类 osg::Reference类实现了对内存区段的引用计数器功能。 所有的OSG的节点和场景图形数据(状态信息 顶点数组 法线 纹理坐标)都派生于Referenced类进行内存引用计数 Referenced类有3个主要组成部分: 1....
在解读这个例子之前,首先了解一下与ref_ptr和Referenced类相关的主要成员和运算符: Referenced类 void ref() 这个公共函数使得Referenced类实例的内存计数器值加一。 void unref() 这个公共函数使得Referenced类实例的内存计数器值减一,如果计数器值为零,那么它自动尝试将类的实例删除,释放相应的内存。 int referenceCou...
1)Referenced类:它是所有场景图形节点对象和OSG的许多其他对象的基类。它实现了一个用于跟踪内存使用情况的内存计数(reference count),如果某个继承自Referenced的对象,其引用计数数值等于0,那么系统将自动调用其析构函数,并清理为此对象分配的内存。 2)ref_ptr类:模板类ref_ptr为其模板内容提供了一个智能指针,模板内...
类描述:对结点起到组织作用,一般做为父结点或者根结点出现。它允许有一系列的孩子,相同的孩子或者孩子之间有引用重得加入的会共享内存,是通过父类osg::Referenced实现自动管理内存句柄的。它继承与osg::Node 1、Group () Group (const Group &, const CopyOp ©op=CopyOp::SHALLOW_COPY) 说明:构造函数。第...
osg::Referenced类是osg中所有成员的base class.它的方法主要是 ref(),unref(),referenceCount(). ref().是在这个类被osg::ref_ptr<>包装时,就是把计数器+1. unref():包装了这个类的osg::ref_ptr<>被释放时,计数器-1.当为0时,就是回收这块内存空间. ...
从OpenSceneGraph 1.9.x开始,OSG开始使用CMake工具来完成源代码工程的生成工作;而在以前的版本中(OSG1.2及以下版本),用于编译源代码的VC7和VC8工程文件是直接附带的。CMake是一个跨平台的编译工具,可以自动测试操作平台的特性,并使用简单的脚本语言来描述源代码工程的生成要求并生成对应平台环境的工程文件(makefile),...
OSG内部使用含有引用计数智能指针 (OSG::Referenced) 通过OSG API传递的OSG对象会将权限赋给OSG, 场景(graph)拥有所有通过addChild()方法加载的对象 osg::ref_ptr 如果一个程序在通过API传递OSG对象之后,仍需要继续跟踪这个对象 则必须使用 osg::ref_ptr 来增加其引用计数(防止此对象被意外删除). ...
Referenced类:实现了对内存区段的引用计数器功能。 包括三个主要组成部分: 保护成员整形变量:_refCount,用作引用计数。 公有函数ref()和unref()用于实现_refCount的增加或减少。不需要直接调用。 作为保护成员存在的虚析构函数。 ref_ptr<>模板类:用于实现一个指向Referenced对象的智能指针,并对其引用计数器进行管理...
坦克节点的指针可以通过使用getUserData方法来获取。由于这个方法的返回值是一个osg::Referenced基类的指针,因此需要将其安全地转换为tankDataType类的指针。为了保证用户数据的引用计数值是正确的,我们使用模板类型osg::ref_ptr<tankDataType>指向用户数据。整个类的定义如下:...
osg::Referenced<-osg::Object<-osg::Node<-osg::Group OSG 的组节点, osg::Group ,允许用户程序为其添加任意数量的子节点,子 节点本身也可以继续分发子节点。Group 作为基类,派生出了许 多实用的节点类,这其中包括本节将要介绍的 osg::Transform , osg::LOD 和 osg::Switch。