Ogre::Archive赏析
来源:互联网 发布:卡祖笛大小号 知乎 编辑:程序博客网 时间:2024/04/19 02:41
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:
- FileHandleDataStream,基于C FILE文件句柄的DataStream。一般用于兼容不支持C++流文件系统的平台。
- FileStreamDataStream,基于C++std::basic_istream的DataStream。FileSystemArchive文件系统采用该文件流。
- MemoryDataStream,基于整块连续内存的DataStream。以MemoryDataStream形式提供的数据流,都是被完整的加载到连续内存中的。
- ZipDataStream,专为配合ZipArchive而实现的压缩数据流,以对应zip中某个具体的文件。
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部分抠出来,然后仅实现自己的包文件逻辑部分。
- Ogre::Archive赏析
- 转:Ogre TerrainGroup地形赏析
- Ogre源代码浅析——Archive对象
- 赏析
- 赏析
- archive
- archive
- archive
- Archive
- 菜鸟学习OGRE和天龙八部之十八: 获得档案(Archive)文件列表
- 菜鸟学习OGRE和天龙八部之十八: 获得档案(Archive)文件列表
- Ogre
- ogre
- OGRE
- OGRE
- ogre
- OGRE
- ogre
- JDK1.5中的线程池使用简介
- flex页面跳转
- 修改Static控件的字体颜色
- 浅谈MVP与Model-View-ViewModel(MVVM)设计模式
- const 在C/C++里面的用途
- Ogre::Archive赏析
- 脚本改变生活(一)
- 应用Extjs所需要引入的包以及顺序
- 深入浅出GUI线程安全(一)
- HTML字符实体(关于&nbsp;&gt;&lt;等)
- 关于程序员个性
- PL/SQL调试存储过程
- jquery 插件(七) jquery UI(2)
- MFC与.NET的区别