OGRE1.7 3D图形引擎2:singleton,Smart Point,Memory Manager

      singleton模式是软件工程中的一个术语,他是一种设计模式,将类的实例化个数限制在一个。Ogre也提供了相应的模板 template <typename T> class Singleton。只需通过该模板创建的类,既可以使用Class::getSingleton()方式获取类的唯一实例。Ogre中不少类使用了singleton设计模式:大量的Manager类,Profiler类,Root类,这些整个程序运行过程中只有唯一实例的类都是使用singleton模板创建的。当你需要运行时只有一位实例的类时,你可以考虑使用singleton(每种设计模式都只能应付一部分问题,开发者觉得怎么简单怎么来,这里不强调用singleton代替其他单实例的设计模式)

    Smart Point,irrlicht绝大多数对象都继承于IReferenceCounted的类,该类提供了smart point的一些操作-grab以及drop,这个和MacOS X下Cocoa中的NSObject是一样的(retain & release),在OGRE中,SharedPtr是smart point的模板,通过share和release操作。同样,对于smartPoint的优劣,我曾经和同事有过争论,最后的结论是,谁爱用谁用去,出了问题自己找。(忘记匹配造成内存泄漏是该模式最大的问题)


    关于内存管理,OGRE1.7提供了4种方式,在CMAKE生成项目的时候可以调整,生成以后也可以修改OgreBuildSettings.h中的额OGRE_MEMORY_ALLOCATOR 来更改方式,我生成项目的时候没更改过设置,默认使用的是OGRE_MEMORY_ALLOCATOR_NEDPOOLING。几种不同的内存管理方式我没测过,有心的童鞋们可以试试看。OGRE的内存管理非常有趣,几乎为每种不同类型的对象创建了一个Alloc(见OgreMemoryAllocatorConfig.h,从下往上看),这些Alloc又对应于8种不同AllocatedObject模板。模板内的参数看似是不同的,再往里面一瞧,CategorisedAllocPolicy<MemoryCategory Cat>中的Cat根本没起到任何作用。因此在默认情况下,所有的对象alloc的方式都指向了同一种方式。为啥要这么搞,注释写清楚了:这么写的目的只是笼统的给大家一个示例,绝大多数应用程序对象的alloc和dealloc都是统一处理的,当然,如果你有特殊需求的话,比如说某一个类型的object需要特殊的内存管理方式,你可以通过cat区分来使用不同的内存管理方针。如果你有需求,可以这么搞一下。对于大多数人都是没必要的


      简单描述了下ogre整个引擎的3个小点,虽然对于只是使用Ogre的人来说,这些部分都“不怎么重要”,但是我觉得对于要更改引擎,写一些插件或者编辑器,或者要理解整个引擎的人来说,还是应该把引擎一些基础模块都都看下。模块的分类参照

http://www.ogre3d.org/docs/api/html/modules.html ,对照着模块,看源代码。我觉得这样学习引擎会比较快,不明白的地方可以跳过,或者网上查。实在不行不求甚解,等看完了模块,看sample的时候,有些问题就自然懂了。:-)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值