Ogre::Archive赏析

   Ogre::Archive代表一个抽象的文件系统,是 Ogre资源管理部分的基石。用户可以通过 open函数方便的打开文件,该函数返回一个DataStreamPtr。而DataStreamPtr是 SharedPtr< DataStream>的typedef。SharedPtr是Ogre自定义的引用计数性质的聪明指针,和 boost中的 shared_ptr如出一辙。这样当代表文件的数据流引用计数为0时,文件会自动关闭。这正好是Archive只提供open,没有也没必要提供对应的close方法的原因。与其让用户战战兢兢的每次记得关闭文件,还不如自动化来的清爽。

 

    Ogre::Archive::open返回的DataStream相当于一个抽象的可供读(写)的文件。DataStream数据流就代表了一个文件,文件也是以DataStream数据流的形式供用户访问的。DataStream提供了常用的类似于标准文件系统的读写和文件定位方法。Ogre默认实现了四种具体的DataStream:

 

    Ogre默认提供了两种具体的Archive文件系统的实现:

  • FileSystemArchive,是对操作系统文件系统的适配。产品开发期多采用该文件系统。
  • ZipArchive,是对zip压缩文件包的适配。产品发布时多采用类似的打包文件系统。

    另外,ogre-7z项目还提供了基于7z压缩包的Ogre Archive实现。

 

    各种不同的Archive文件系统由各自对应的ArchiveFactory来创建,这些工厂需要在ArchiveManager管理器中注册,然后就可以通过ArchiveManager::load来获得对应的Archive。有了Archive就可以轻松open得到对应的DataStream了。

 

    Ogre Archive明晰的接口很方便使用,也很容易去写新的包文件插件。自定义Archive路线图:继承Archive实现MyArchive,只在有必要的情况下才继承DataStream实现MyDataStream。然后继承ArchiveFactory简单实现一个MyArchiveFactory,并注册到ArchiveManager,万事大吉。

 

    框架结构:

  • ArchiveFactory,负责Archive的create or destroy。
  • ArchiveManager,包含若干ArchiveFactory,提供Archive的load/unload接口。
  • Archive,文件系统,可以是磁盘文件系统或者某个文件包
  • DataStream,文件数据访问流

 

    目前国内很多DIY的引擎都是绑死到封闭的DIY文件系统的。其实可以选择将Ogre的Archive部分抠出来,然后仅实现自己的包文件逻辑部分。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值