OGRE资源相关分析

Resource<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Resource的类继承体系如下:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

Resource.PNG
    Resource
代表着一类可以被载入的资源,比如MeshTexture等。每个资源有其唯一的Name,根据Name可以定位到某个资源,这样也确保了资源只能被载入一次。并且Resource必须在一段时间不使用的时候要被删除。

要实现为Resource子类有以下要求:

1.                  构造函数和Resorce有相同的参数。子类构造函数不允许有其它的参数传入,如果需要设置其它成员变量可以通过Set函数。

2.                  实现Resource中的纯虚函数loadImplunloadImpl。而且mSize必须在loadImpl调用后设置。

3.                   StringInterface ParamCommand and ParamDictionary setups in order to allow setting of core parameters (prior to load)through a generic interface.

 

资源有两种载入的方法,一个是通过解析脚本文件自动载入,另一种是手工载入。手工载入的好处是:由于某些意外原因导致资源unload,这时就不能通过Resourcereload重新载入,因为是意外原因所以mIsLoaded就仍然为true。通过使用手工载入就可以预防这个问题。

 

 

ResourceManager

ResourceManager的类继承体系如下:

ResourceManager.PNG
Resource对比我们可以得出ResourceManagerResource是一一对应的。其实一个具体类型的ResourceManager就是管理管理这个类型资源的资源池。通过ResourceManager可以可以索引这些资源,查找资源,载入和销毁资源。

ResourceManager还有一些其它功能,比如它保存着它所掌管类型的资源的载入,卸载优先顺序。这样载入资源的时候可以一种一种的载入,节省了时间。ResourceManager自己定义了内存预算,我们载入/卸载的时候都会通知该变这个内存预算值,这样我们就可以得知我们使用了多少内存。另外,要注意的一点是资源可以通过Resource类被载入和卸载,但只能使用ResourceManager来创建和删除。

 

 

ResourceGroupManager

与这个类声明所在的.h文件中有一个ResourceGroupListener类的声明,这个类定义了如下几种事件接口,它们在操作资源的不同时候被调用。

·  resourceGroupScriptingStarted

·  scriptParseStarted (*)

·  scriptParseEnded (*)

·  resourceGroupScriptingEnded

·  resourceGroupLoadStarted

·  resourceLoadStarted (*)

·  resourceLoadEnded (*)

·  worldGeometryStageStarted (*)

·  worldGeometryStageEnded (*)

·  resourceGroupLoadEnded

 

ResourceGroupManager把资源分成一个个的组,通过调用资源对应的ResourceManager(注:通过ResourceManagerMap使得string sourceType和ResourceManager挂钩)来加载或卸载组中的资源。此外如果一个ResourceManager支持通过脚本来定义资源,那么这个类就会找到脚本的位置然后告诉ResourceManager来解析它们。在ResourceGroupManager中,资源可以看成有4种状态:UndefinedDeclaredUnloadedLoaded

ResourceGroupManager可以让你把一系列资源看成是一个单元来载入和卸载。比如一个资源组可以是游戏中一个关卡的所有资源。OGRE中有一个预先定义的资源组: DEFAULT_RESOURCE_GROUP_NAME,它所控制的资源只有到了程序退出时才会被释放。

    一旦你创建了自己的资源组,你可以通过以下3种途径为这个资源组载入资源:

1.  调用declareResource()

2.  通过使用脚本;ResourceManager的一些子类型拥有特定的脚本类型比如:.material.overlay等。

3.  调用ResourceManager::create

如果你使用前面两种方法必须确保调用initialiseResourceGroup

通过 void createResourceGroup(const String& name)方法我们可以创建一个资源组。

创建好一个资源组后我们就可以为这个资源组增加搜索路径,我们将在这些路径中查找我们需要的资源。通过以下函数我们可以为一个资源组添加搜索路径:

void ResourceGroupManager::addResourceLocation(const String& name,

        const String& locType, const String& resGroup, bool recursive)

设置好资源路径后我们就可以为资源组声明资源,从而你可以载入和卸载它们。声明资源也可以通过解析脚本文件。

        void declareResource(const String& name, const String& resourceType,

            const String& groupName = DEFAULT_RESOURCE_GROUP_NAME,

           const NameValuePairList& loadParameters = NameValuePairList());

 

当我们创建资源组后,添加了搜索路径,并且可能也声明了一些资源后,我们还不能直接使用资源,这个时候我们要调用void initialiseResourceGroup(const String& name)来初始化资源组。这个方法也触发了以下两个行为:

1. 通过给定的资源路径解析资源路径中所有类型资源的脚本,脚本里面的资源将被创建,但这个时候还没有被载入。            

2. 创建通过调用declareResource声明的资源。同样这个时候资源也仅仅是被创建而没有被载入。

所以这个方法只是为各个ResourceManager创建资源而没有载入它们。仅仅是表面应用程序可以找到这些资源,但在调用load之前还不能被使用。还有就是一旦调用这个方法后你就无法再通过脚本,和提前声明来创建新的资源。如果要那么做只有先调用clearResourceGroup,然后重新声明资源,再调用这个函数。

 

资源创建好后为了使用我们必须调用

void loadResourceGroup(const String& name, bool loadMainResources = true,

           bool loadWorldGeom = true);

这样我们才可以使用这些资源。

与它相对的是void unloadResourceGroup(const String& name)调用这个函数后资源将被卸载,但是资源的声明仍然存在于各个ResourceManager中。要取消所有的声明必须调用

void clearResourceGroup(const String& name),当这个函数被调用后所有资源的声明也就不存在了,只剩下资源的搜索路径。

下面这个方法最彻底,它先卸载资源,然后清空资源,最后把资源组从资源组的集合中删除。

void destroyResourceGroup(const String& name)

转载于:https://www.cnblogs.com/SweetDream/archive/2006/02/10/327999.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值