关于OGRE基础教程6中CEGUI的layout文件can not locate的问题

时间:2021-01-15 03:40:21

教程是针对以前版本的OGRE和CEGUI的。所以还是.xml格式后缀,现在CEGUI7.1使用的是.layout后缀,并且在配置Resource.cfg的时候需要把layout文件的路径设置在[general]配置节下面。这个问题需要再仔细看看resourcemanager模块是怎么处理这些配置的,我再写个详细说明。

接上面问题:

  经过查看CEGUI和OGRE的源代码,发现:在CEGUI7.1版本中使用         mGUIRenderer=&CEGUI::OgreRenderer::bootstrapSystem();

类似的代码来初始化,在OgreRenderer::bootstrapSystem();

中具体的初始化代码如下:

    OgreRenderer& renderer = OgreRenderer::create(target);
      OgreResourceProvider& rp = createOgreResourceProvider();
      OgreImageCodec& ic = createOgreImageCodec();

其中重要的是OgreResourceProvider,在CEGUI中有默认的resourceprovider,在OGRE 中我们调用了bootstrapSystem,自然使用的就是OgreResourceProvider,自然资源的查找遵循OGRE的配置规则。

再深入会发现:在WindowManager::loadWindowLayout该方法中会有

System::getSingleton().getXMLParser()->parseXMLFile(handler,   filename, GUILayoutSchemaName, resourceGroup.empty() ? d_defaultResourceGroup : resourceGroup);这行,我们查找parseXMLFile方法在类

ExpatParser : public XMLParser中,而在ExpatParser::parseXMLFile中很快发现秘密所在:CEGUI::System::getSingleton().getResourceProvider()->loadRawDataContainer(filename, rawXMLData, resourceGroup);问题很明了具体调用关系如下:

CEGUI->初始化(包括OgreResourceProvider)->loadWindowLayout->parseXMLFile->getResourceProvider()->loadRawDataContainer

自然报错误是在OGRE的ResourceManager模块当中

 

至于为何一定要在general下,我想应该是我们没有在loadWindowLayout的时候提供资源组的名称,所以使用了默认的general组。