登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

秒大刀 博客

好好学习 天天向上

 
 
 

日志

 
 
 
 

Ogre::Archive赏析  

2011-05-01 01:23:19|  分类: Game |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    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的引擎都是绑死到封闭的自定义文件系统的。其实可以选择将Ogre的Archive部分抠出来,然后仅实现自己的包文件逻辑部分。

 

推荐阅读:

Ogre::Resource赏析


2011-10-9
    ogre-7z项目基于7z包格式实现了Ogre Archive。截止Revision e234cd75e1,尚不能很好兼容7z-9.x版本,但与7z-4.x版本兼容良好。

2011-10-12
    暴雪著名的MPQ资源包已经从StarCraft II开始支持LZMA格式的压缩了。7z在游戏资源包中的地位已经慢慢开始显露了。

2011-10-15
    DataStream所提供的readwrite接口都非常简单,保证了DataStream本身的清爽干净。而Serializer则提供了复杂的读写操作接口,是DataStream很好的补充。将二者分开的设计很有讲究。
    Serializer中的读写接口都是protected,暗示Serializer本身并非作为DataStream之上简单的流读写的实用类,而是要求用户去继承Serializer来实现自己的序列化器——利用Serializer提供的protected读写方法来进行序列化相关操作,而外部public接口保持严密简洁。

2011-11-29
   Windows XP上std::fstream在中文路径下可能会打开文件失败。当然通过调整local是可以解决中文路径工作不正常的,但因local会带来副作用,所以用完之后最好立即恢复,而频繁的local设置又会带来很大的性能瓶颈。
    为了保证兼容性,建议将 FileSystemArchive 改建在 FileHandleDataStream 上。
  评论这张
 
阅读(2110)| 评论(1)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018