zoukankan      html  css  js  c++  java
  • 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 }

       慢慢进步.......

  • 相关阅读:
    Idea中重建maven模块,dependencies引入为空的解决办法
    HTML <base> 标签 为页面上的所有链接规定默认地址或默认目标
    HTML 5 视频
    JavaScript 使用反斜杠对代码行进行折行
    HTML <b>、 <strong> 、<big>、<small>、<em>、<i>、<sub>和<sup> 标签
    JavaScript concat() 方法-连接两个或多个数组
    JavaScript Array(数组)对象
    JavaScript indexOf() 方法和 lastIndexOf() 方法
    JavaScript String(字符串)对象 实例
    JavaScript 对象
  • 原文地址:https://www.cnblogs.com/songliquan/p/3298188.html
Copyright © 2011-2022 走看看