• ogre3D学习基础8 --- 资源管理器


    资源管理

      可管理的资源有:

      材质资源:在.material文件中包含的材质脚本定义(技术、通路、纹理单元等数据的定义)。
      模型资源:经过优化的二进制网格模型文件,扩展名为.mesh。包含几何信息和一些动画数据。
      骨骼资源:经过优化的二进制骨骼文件,扩展名为.skeleton。包含骨骼动的数据以及相应帧动画的信息。
      字体资源:字体的配置信息,扩展名为.fontdef的文件,其中包括TrueType字体的引用以及其他字体配置数据。
      GPU程序资源:在.program中对GPU程序的声明信息,与材质脚本.material文件有类似的结构,但Ogre保证所有.program文件都会在处理材质脚本之前被载入处理。
      纹理资源:在纹理中使用的2D图片数据。每种类型都有其自身的扩展名,比如JPG文件的.jpg或者.jpeg,Targa文件的.tga,诸如此类。

    资源组
      Ogre可以从两个不同的层级来对资源进行管理:对某种类型的资源管理和对一组资源类型的管理。
    资源组与世界地图
      在默认的情况下,Ogre通过场景管理器把整个地图载入“General”资源组中。因此也可以使用与资源管理一样的方法去管理场景/世界地图资源数据。
    资源载入

      如果你所使用的资源在之前没有被载入,那么Ogre会自动帮助你在内部执行相应的载入动作。
    后台处理资源载入

      不得不提出的是,在默认的情况下Ogre并不是线程安全的。

    后台载入的实现多线程

      在使用多线程管理后台载入的时候,你必须定义一个这样的宏,把它写在OgreConfig.h文件中。这样就可以实现后台载入的功能。

      #define OGRE_THREAD_SUPORT 1//

    资源卸载

      资源数据载入后一直驻留在内存中直到到应用程序强制卸载(通过资源组管理器或者直接释放资源)Ogre绝不会自动从内存中释放资源,并且你不能够强制卸载还被资源组引用的资源。

    资源生存周期 

      四种状态之间的变化:未定义状态-->已声明状态--->未载入状态--->已载入状态。使用完毕时全部卸载,进入未定义状态。

     资源管理的配置文件在resources_d.cfg中,如下:

     1 # Resources required by the sample browser and most samples.
     2 [Essential]
     3 Zip=../../media/packs/SdkTrays.zip
     4 Zip=../../media/packs/profiler.zip
     5 FileSystem=../../media/thumbnails
     6 
     7 # Common sample resources needed by many of the samples.
     8 # Rarely used resources should be separately loaded by the
     9 # samples which require them.
    10 [Popular]
    11 FileSystem=../../media/fonts
    12 FileSystem=../../media/materials/programs
    13 FileSystem=../../media/materials/scripts
    14 FileSystem=../../media/materials/textures
    15 FileSystem=../../media/materials/textures/nvidia
    16 FileSystem=../../media/models
    17 FileSystem=../../media/particle
    18 FileSystem=../../media/DeferredShadingMedia
    19 FileSystem=../../media/PCZAppMedia
    20 FileSystem=../../media/RTShaderLib
    21 FileSystem=../../media/RTShaderLib/materials
    22 FileSystem=../../media/materials/scripts/SSAO
    23 FileSystem=../../media/materials/textures/SSAO
    24 Zip=../../media/packs/cubemap.zip
    25 Zip=../../media/packs/cubemapsJS.zip
    26 Zip=../../media/packs/dragon.zip
    27 Zip=../../media/packs/fresneldemo.zip
    28 Zip=../../media/packs/ogretestmap.zip
    29 Zip=../../media/packs/ogredance.zip
    30 Zip=../../media/packs/Sinbad.zip
    31 Zip=../../media/packs/skybox.zip
    32 
    33 [General]
    34 FileSystem=../../media
    35 
    36 # Materials for visual tests
    37 [Tests]
    38 FileSystem=../../media/../../Tests/Media

      文件中有四个资源组,"Essential","Popular","General","Tests",其中的FileSystem代表文件是目录结构的,ZIP代表文件是zip压缩文件。

    资源初始化

           资源初始化需要一定的顺序支持。在正式添加资源前,你需要首先初始化相应的资源组。

    1 // 初始化所有先前定义的资源组
    2 ResourceGroupManager::getSingleton().initialiseAllResourceGroup();//
    // 或者每次交替初始化一个资源组
    ResourceGroupManager::getSingleton().intialiseResourceGroup(“Essential”);
    ResourceGroupManager::getSingleton().intialiseResourceGroup(“Popular”);
    ResourceGroupManager::getSingleton().intialiseResourceGroup(“General”);
    ResourceGroupManager::getSingleton().intialiseResourceGroup(“Tests”);

    清理或者销毁资源组

      清理资源组只是卸载和删除资源组里面的资源。

    1 ResourceGroupManager::getSingleton().clearResourceGroup(“General”);//

      销毁资源组不但清理了里面的资源,还销毁了资源本身。

    1 ResourceGroupManager::getSingleton().destroyResourceGroup(“General”);

    档案管理器(ArchiveManager

      要实现档案管理的功能,必须定义一个继承自Archive的接口,然后实现相应的工厂方法ArchiveFactory,注册到文档管理器中

     1 class MyArchive : public Archive
     2 {
     3     // 实现代码
     4 }
     5 
     6 class MyArchiveFactory : public ArchiveFactory
     7 {
     8     //其他ArchiveFactory的一些方法
     9   Archive* createInstance(const String& name)
    10   {
    11    return new MyArchive(name, “MyArchiveType”); 12   } 13 }; 14 void function() 15 { 16   MyArchiveFactory *factory = new MyArchiveFactory; 17   ArchiveManager::getSingleton().addArchiveFactory(factory); 18 }

       慢慢进步.......

  • 相关阅读:
    字符串处理类
    PageHelper
    JavaScriptPlus操作类
    Http 数据操作
    解压 压缩 C#
    验证码生成 C#
    MySecurity(安全类)
    博客搬迁至wordpress站点
    我的前端MVC之路
    三个css3趣玩小试
  • 原文地址:https://www.cnblogs.com/songliquan/p/3298188.html
Copyright © 2020-2023  润新知