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无二异。

  • 相关阅读:
    屏蔽2003:在系统启动时至少有一个服务或驱动程序产生错误
    C#中有关string和byte[]转换的问题
    如何控制winform程序只能打开一个呢?
    ArrayList的使用方法【转载】
    ASP.NET中ajaX学习记录
    C#去除字符串空格的几种方法【转载】
    C# 中2,10,16进制及其ASCII码之间转化
    vc++下char数组赋值乱码问题
    c#关机时自动退出程序
    Android入门前言(一)之Android应用开发入门五问 (转自:http://blog.csdn.net/android_tutor/)
  • 原文地址:https://www.cnblogs.com/bite_the_bullet/p/1914132.html
Copyright © 2011-2022 走看看