您的位置:首页 > 其它

分析一下ogre的sample浏览的类图

2010-12-22 19:30 141 查看
由于在学习nxogre,所以而例子又都是用plugin的形式写到ogre的samplebrowser中去的,对于如何调用的自己不是很清楚,所以想自己动手写nxogre也不知如何入手,想来想去还是去了解一下sample的插件到时是如何写的,下面来分析一下。



先看上面的类图,我们根据它来分析程序的走向流程:

1.sampleBrowser,程序首先调用sampleContext的go函数,go里面完成了三方面功能:1、创建root,选择渲染插件,创建渲染窗口,(创建OIS,载入资源,初始化资源,注册root,窗口时间帧监听),括号内的是在setup函数中实现;2、调用runSample函数,参数是sample,主要完成功能是通过root的插件实例检验实例所需要的插件,最重要的是调用_setup函数(属于sample类);3循环渲染,update。

2、既然已经到_setup函数,那我们就来分析一下sample的这个函数吧:感觉最重要的还是调用了setupContent,由于是虚函数,所以实际调用的是我们写的sample的setupContent.如果这样理解的话那么sdksampler就没用了,所以我们查看哪些例子,发现其实那些sample都是调用的sdksample.所以你理解的话就应该把上面的sample全部置换为sdksample。

  3、其实上面的分析有问题,大家发现没,其实分析步骤1中的setup函数不在sampleContext中,而是调用的其实是其子类sampleBrowser中的setup。好了,这样就到本次分析的关键了:在setup中调用了loadSamples(),我们可以看到mRoot->loadPlugin(sampleDir + *i);的字样,这个便是samplebrowser的核心所在,参考如下:

DLL_START_PLUGIN pFunc = (DLL_START_PLUGIN)lib->getSymbol("dllStartPlugin");

if (!pFunc)
OGRE_EXCEPT(Exception::ERR_ITEM_NOT_FOUND, "Cannot find symbol dllStartPlugin in library " + pluginName,
"Root::loadPlugin");

// This must call installPlugin
pFunc();
}

}


只要调用了这个函数,我们便会调用各个例子中的dllstartplugin,这样你也就顺利的install你的插件了,而unloadPlugin其实是一样的,具体就不分析。

其实分析整体基本流程,你会发现与wizard无二异。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: