翻译《real-time 3d terrain engines using C++ and DX9 》(4)

 
管理共享数据资源
       引擎包含集中不同的共享数据。这些资源表示的数据在多人游戏中访问和共享。例子包括纹理,顶点缓存,索引缓存和渲染方法。事实上,许多共享资源都是依赖于显卡,因为他们使用显存作为他们存储的一部分。这些设备的管理器需要访问这些依赖资源。例如,显示管理器需要访问所有纹理,顶点和索引缓存这样它能够处理那些显示设备失去和重新得到的接口的情况。
       这需要一些关键的类。首先,我们为所有共享资源定义一个基类,cResourcePoolItem.他提供了一个外部访问方法可以使用的通用接口。这些包括基本的创建和销毁这些资源,启用和禁用共享资源,把它作为流输入和输出磁盘的接口函数。这些基类中的成员函数被定义为纯虚函数,强制所有派生类提供基于这些函数的实现。这个虚接口允许外部访问者,例如一个设备管理器去影响一个基于cResourcePoolItem类的对象的集合而不需要知道他们代表的具体类型。
       带着同样的想法,我们增加一个类叫做cResourcePool。这个类是cDatePool的一个扩展,设计来处理基于cResourcePoolItem类的兑现,提供额外的方法来操作这些资源。就像cResourcePoolItem类,cResourcePool类提供一个范围者可以使用的基本接口。假定所有的cResourcePoolItem对象包含一个标准的接口方法集合,cResourcePool提供增加成员函数在全部池成员中实现迭代并且传递数据给这些函数。对外部访问者来说,这提供了重要的对共享数据类型的处理。例如,显卡管理器可以使用这个类型的接口去快速的启用和禁用一个cDatePool对象中的所有纹理。
       共享资源通常通过一个文字字符串定义。例如,对纹理来说,这个字符串可能是磁盘上源图像的实际路径名。除了提供重要的操作方法,cResourcePool也存储这些资源名字字符串的查找表。这个给访问者提供一个通过名字查找共享资源对象的方法。使用标准模板库(STL)的map容器类来建立这个资源名字的“电话本”,并且提供访问和查找方法来定位数据池中的每个成员。
       最后,cResourcePoolManager单实例类(singleton class)提供了所有贡献资源池的存储仓库。每个cResourcePool可以在cResourcePoolManager对象中创建和注册,同时索引值定义了数据池中保存的资源类型和它所属于的家族(family)。这些索引可以在cResourcePoolManger头文件的全局枚举中找到。一个枚举定义了所有资源可能属于的家族(family)(音频的,视频的,等等)。附加的枚举定义了每个家族包含的资源类型。
   
       联合的家族和类型索引被存储为一个32位值的16位中。这个值,叫做cResourceCode,被用于唯一的定义管理者中的所有资源对象类型。当新的资源数据池背简历,他们在管理器中注册他们自己,提供一个cResourceCode对象来唯一的标识他们自己。外部的访问者可以通过使用合适的cResourceCode从管理器中请求cResourcePool接口来得到对他们的访问。
       当我们建立实际的引擎资源和管理器的时候,这些资源类的功能将变得更加明显。现在,参考配套光盘上资源相关的源代码文件来进一步探索他们的功能。资源文件在被张的开头列出。清单4.3是这些资源对象怎样被创建和使用的例子。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值