Ogre中如何打开资源后台加载

  1. 打开资源后台加载。打开文件“OgreBuildSettings.h”,将里面的OGRE_THREAD_SUPPORT改为2OGRE_THREAD_PROVIDER改为1OGRE_USE_BOOST不改好像没事)。在VS2008的工具菜单中添加boost 1.52的头文件和库文件路径。这样,引擎已经支持了后台加载。

  2. 在引擎支持了后台加载后,还需要将应用程序改成使用后台加载。在SampleBrowser.h中将两处“Ogre::ResourceGroupManager::getSingleton().initialiseResourceGroup("");”调用替换成“Ogre::ResourceBackgroundQueue::getSingleton().initialiseResourceGroup("");”。运行后会崩溃在“mTrayMgr= new SdkTrayManager("BrowserControls", mWindow, mMouse, this);”,因为这里需要依赖资源,而资源还在后台加载中。这个问题可以使用加载监听器来解决,在完成后再继续主线程中的运行,如果为了省力可以使用Sleep5-15秒钟,不同机器初始化的时间不一样。监听器的简单做法:自己写一个类继承自ResourceBackgroundQueue::Listener,这个类维护一个多线程同步对象(MutexEventSemaphore等等),主线程调用完“Ogre::ResourceBackgroundQueue::getSingleton().initialiseResourceGroup("");”马上等待多线程同步对象。资源线程完成资源加载后会例行调用ResourceBackgroundQueue::Listener::operationCompleted(),在这个函数里改变多线程同步对象的状态,这样主线程就会继续执行了。

  3. ResourceGroupManager类中对外暴露的资源操作接口在ResourceBackgroundQueue里面都有对应的,调用后者可以以异步加载的方式记载资源,当然需要传入监听器。不过应该改造ResourceBackgroundQueue中的函数,Ogre的做法是通过宏来控制流程的,应该改成如果传入Listener指针就按照异步加载,传空指针就同步加载,这样就能够随时改变资源加载的方式,因为有时候确实需要同步加载资源。还有个隐患,由于监听器对象可能是个逻辑对象,而这个对象可能在资源加载过程中析构掉了,会引起野指针异常,应该传入监听器的智能指针。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值