OGRE材质创建小注

1、材质创建。Ogre::MaterialPtr lMaterial = lMaterialManager.create("M_NoLighting+OneTexture",lNameOfResourceGroup);

2、

ResourcePtr ResourceManager::create(const String& name, const String& group, 
		bool isManual, ManualResourceLoader* loader, const NameValuePairList* params)
{
	// Call creation implementation
	ResourcePtr ret = ResourcePtr(
            createImpl(name, getNextHandle(), group, isManual, loader, params));
        if (params)
            ret->setParameterList(*params);

	addImpl(ret);
	// Tell resource group manager
	ResourceGroupManager::getSingleton()._notifyResourceCreated(ret);
	return ret;

}


getNextHandle() 表明每个材质都有一个 ResourceHandle 句柄作为标示。

createImpl(name, getNextHandle(), group, isManual, loader, params)); 是一个虚函数,被 MaterialManager::createImpl 调用

3、addImpl(ret);  在 ResourceManager 中加入2变量。

  1)、把资源加入到 mResources变量,ResourceMap结构:

          typedef HashMap< String, ResourcePtr > ResourceMap;

  2)、把资源加入到 mResourcesByHandle变量,ResourceHandleMap结构:

          typedef map<ResourceHandle, ResourcePtr>::type ResourceHandleMap;

4、ResourceGroupManager::getSingleton()._notifyResourceCreated(ret);

       在 ResourceGroupManager 中把该资源根据它的加载优先级(为一浮点数),添加到相应的 LoadUnloadResourceList中。

       估计是加载的时候有个先后顺序。

	void ResourceGroupManager::addCreatedResource(ResourcePtr& res, ResourceGroup& grp)
	{
		OGRE_LOCK_MUTEX(grp.OGRE_AUTO_MUTEX_NAME)
		Real order = res->getCreator()->getLoadingOrder();

		ResourceGroup::LoadResourceOrderMap::iterator i = grp.loadResourceOrderMap.find(order);
		LoadUnloadResourceList* loadList;
		if (i == grp.loadResourceOrderMap.end())
		{
			loadList = OGRE_NEW_T(LoadUnloadResourceList, MEMCATEGORY_RESOURCE)();
			grp.loadResourceOrderMap[order] = loadList;
		}
		else
		{
			loadList = i->second;
		}
		loadList->push_back(res);
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值