zoukankan      html  css  js  c++  java
  • 分析一下ogre的sample浏览的类图

        由于在学习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的核心所在,参考如下:

    	void Root::loadPlugin(const String& pluginName)
    	{
    		// Load plugin library
            DynLib* lib = DynLibManager::getSingleton().load( pluginName );
    		// Store for later unload
    		// Check for existence, because if called 2+ times DynLibManager returns existing entry
    		if (std::find(mPluginLibs.begin(), mPluginLibs.end(), lib) == mPluginLibs.end())
    		{
    			mPluginLibs.push_back(lib);
    
    			// Call startup function
    			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无二异。

  • 相关阅读:
    Asp.Net实现FORM认证的一些使用技巧(必看篇)
    python3 关联规则Apriori代码模版
    一家人(模拟)
    一家人(模拟)
    积木城堡(dp)
    积木城堡(dp)
    Tensorflow笔记——神经网络图像识别(四)搭建模块化的神经网络八股(正则化,指数衰减学习率,滑动平均等优化)...
    Tensorflow笔记——神经网络图像识别(四)搭建模块化的神经网络八股(正则化,指数衰减学习率,滑动平均等优化)
    保存训练好的机器学习模型
    保存训练好的机器学习模型
  • 原文地址:https://www.cnblogs.com/bite_the_bullet/p/1914132.html
Copyright © 2011-2022 走看看