分析一下ogre的sample浏览的类图
2010-12-22 19:30
141 查看
由于在学习nxogre,所以而例子又都是用plugin的形式写到ogre的samplebrowser中去的,对于如何调用的自己不是很清楚,所以想自己动手写nxogre也不知如何入手,想来想去还是去了解一下sample的插件到时是如何写的,下面来分析一下。
![](http://pic002.cnblogs.com/images/2010/157336/2010122216465260.png)
先看上面的类图,我们根据它来分析程序的走向流程:
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的核心所在,参考如下:
只要调用了这个函数,我们便会调用各个例子中的dllstartplugin,这样你也就顺利的install你的插件了,而unloadPlugin其实是一样的,具体就不分析。
其实分析整体基本流程,你会发现与wizard无二异。
![](http://pic002.cnblogs.com/images/2010/157336/2010122216465260.png)
先看上面的类图,我们根据它来分析程序的走向流程:
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无二异。
相关文章推荐
- Ogre sample启动流程分析
- 【图解】Ogre1.8 SampleBrowser流程全面分析
- ogre sample分析(一)
- 分析一下 原型模式的 UML 类图 。 复制对象, 深浅拷贝 月经贴 ,请回避
- ogre sample分析(一)
- 《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.7 关于对象图
- Linux定时器分析-源码sample
- Ogre2.1 分析笔记(六) 合成器脚本分析
- 分析一下Portal的部分页面组成
- 分析了一下360安全卫士的hook(zt)
- 今年阿里双十一CDN要冲历史之最,峰值带宽达到5000G+,来高手分析一下他们的CDN节点数量和规模
- 简要分析Ogre渲染队列的实现原理
- arcgis sample代码之SOE示例代码Length Calculator Server Object Extension的源码分析
- 从通信的角度分析一下微信推送的长连接的弊端——网易面试
- iOS应用崩溃日志分析低内存闪退 因为低内存崩溃日志与普通崩溃日志略有不同,所以本教程特别分开说明一下。 iOS设备检测到低内存时,虚拟内存系统发出通知请求应用释放内存。这些通知发送到所有正在运行
- 好吧~分析比较一下当前互联网JavaWeb不敌php等其他平台的原因~当然先收集信息 2
- 谈客户如同谈恋爱,分析一下你为什么失恋?
- Ogre内部渲染流程分析系列
- [Ogre][地形]OgreTerrain的实现原理分析
- OGRE内存分配策略分析