zoukankan      html  css  js  c++  java
  • ogre 文件系统

    资源的状态

    资源在ResourceGroupManager中可有如下状态:

    a) Undefined:在此状态Resource没有被实例化。此时Resource的路径已经加入资源路径,但只在文件系统中,Ogre对Resource不做任何处理,即OGRE不会加载在此状态的资源。进入此状态的条件:当调用ResourceGroupManager的addResourceLocation方法时;当资源本是有效的实例,但是调用了ResourceManager::remove或ResourceGroupManager::clearResourceGroup后。

    b) Declared:此时Resource仍没有被实例化,只是加入资源组的已声明列表。当初生化资源组的时候,在此状态的资源,OGRE将会创建该资源。当调用ResourceGroupManager::declareResource后进入此状态。

    c) Unload:此时Resource仍没有配实例化。但查找该资源可以找到,但资源没有使用很多内存,没有被加载。当调用ResourceGroupManager::initialiseResourceGroup或是调用了ResourceManager::create后进入此状态;调用Resource::unload和ResourceGroupManager::unloadResourceGroup后。

    d) Loaded:资源完全被加载。调用ResourceGroupManager::loadResourceGroup后进入加载状态。

    3)资源的加载顺序:

    ResourceGroupManager::addResourceLocation

    ResourceGroupManager::initialise

    ResourceGroupResourceGroupManager::loadResourceGroup

    转自mythma

    -----------------------------------------------

    1,addlocation后resource进入unknown状态,该资源的物理位置可被group找到

    2,initial

          a手动declare 资源

          b initializeResourceGroup中自动包含declare(解析脚本)

             declare之后的资源被加入resourcegroup的列表中 就可以被创建了

     1.  解析ResourceGroup里的所有脚本。脚本继承ScriptLoader,是由ResourceManager定义的。这可导致一些资源成为Declared。
       2.  创建所有的Declared资源。
       3.  相关的ResourceManager创建资源的一个新实例,并把它添加给自己。所有的资源都保存在ResourceManager里。
       4.  这个资源同样也被插入到“有序载入列表(ordered loading list)”里。这样使资源按照指定的顺序载入,如果你想要一次性载入整个资源组的话。一个资源的载入顺序在它的ResourceManager中指定。
       5.  目前,所有的Declared进入了Created阶段。
        create表示有个空的实例被加到manager里了
    3,load
    所有load的资源的数据都在内存中
    ===========================================
    头疼 好像有不对的地方
    在material的parser里有context.material =MaterialManager::getSingleton().create(vecparams[0], context.groupName);
    这难道说material在解析的时候就被创建了 
    根据这两句 parseResourceGroupScripts(grp);
    			mCurrentGroup = grp;	
    		createDeclaredResources(grp);
    确实能说明 先parse再create的
    ===============
    上述问题 我是这样理解的 
    首先这个是官方教程的资源管理器的文档
       1.  解析ResourceGroup里的所有脚本。脚本继承ScriptLoader,是由ResourceManager定义的。这可导致一些资源成为Declared。
       2.  创建所有的Declared资源。
       3.  相关的ResourceManager创建资源的一个新实例,并把它添加给自己。所有的资源都保存在ResourceManager里。
       4.  这个资源同样也被插入到“有序载入列表(ordered loading list)”里。这样使资源按照指定的顺序载入,如果你想要一次性载入整个资源组的话。一个资源的载入顺序在它的ResourceManager中指定。
       5.  目前,所有的Declared进入了Created阶段。

    这段文字描述的是initialResourceGroup所做的事情  让我以为 解析脚本做了的工作是addresource  to declaredResource list
    之后 manul 的资源 和解析脚本得到的资源同时做了 2.3.4.。。。

    这是代码里对initialResourceGroup的注释<ol>
    			<li>Scripts for all resource types which support scripting are
    				parsed from the resource locations, and resources within them are
    				created (but not loaded yet).</li>
    			<li>Creates all the resources which have just pre-declared using
    			declareResource (again, these are not loaded yet)</li>
    			</ol>

    另外 每个parser里并没有 adddeclaredlist这样的操作 而只是如 上述注释所说的create(XXmanager.getsinglton().create)
    并且我去掉了 initialRescourseGroup代码里的
    createDeclaredResources(grp);
    			parseResourceGroupScripts(grp);
    			mCurrentGroup = grp;
    	//		createDeclaredResources(grp);
    			grp->groupStatus = ResourceGroup::INITIALISED;
    
    其实脚本里的资源都被正常加载使用了

    综上 我的出的结论是   parserscript完成了  资源管理器文档里的 1 2 3 4 5 一直使资源到了 created的阶段
    而 对于 和此流程并行的 manual得到的资源  他们走的是created declared resource这个函数。。。和之后的过程
    所以并不是create了两次  
    created declared resource遍历的是declaredlist 而parsescript和此list无关
  • 相关阅读:
    类的嵌套
    一种设计模式--单例模式
    python中的类(二)
    Python中的类(一)
    基于session和cookie的登录验证(CBV模式)
    Django中的CBV和FBV
    python3 装饰器
    cookie和session
    基于cookie和session的登录验证
    python3 安装win32api
  • 原文地址:https://www.cnblogs.com/minggoddess/p/1983851.html
Copyright © 2011-2022 走看看