Changeset 924


Ignore:
Timestamp:
05/08/06 06:52:15 (18 years ago)
Author:
mattausch
Message:

adding config loader

Location:
GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TerrainFrameListener.cpp

    r901 r924  
    8181         
    8282std::ofstream video_out("video.lst"); 
     83 
     84// if we are recording a demo 
     85static const bool DEMO_HACK = false; 
    8386 
    8487//----------------------------------------------------------------------- 
     
    111114#else 
    112115mCurrentAlgorithm(GtpVisibility::VisibilityEnvironment::FRUSTUM_CULLING), 
     116//mCurrentAlgorithm(GtpVisibility::VisibilityEnvironment::STOP_AND_WAIT_CULLING), 
    113117#endif 
    114118mNodeVizMode(NODEVIZ_NONE), 
     
    194198        mMyStatsFpsInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/MyFpsInfo"); 
    195199        mMyStatsFpsInfo->setCaption(str); 
     200         
    196201        //mMyStatsAlgorithmInfo->setTop(top); 
    197  
    198         //mMyStatsOverlay->show(); 
    199  
    200         if (1) 
    201         { 
    202                 initVisStatsOverlay(); // visibility stats overlay 
    203                 initHelpOverlay();     // help overlay 
    204                 initQueryOverlay();    // visibility query stats overlay 
    205          
    206                 // show stats overlays 
     202         
     203        initVisStatsOverlay(); // visibility stats overlay 
     204        initHelpOverlay();     // help overlay 
     205        initQueryOverlay();    // visibility query stats overlay 
     206         
     207        // show stats overlays 
     208        if (!DEMO_HACK) 
    207209                showStats(true); 
    208         } 
     210        else 
     211                mMyStatsOverlay->show(); 
     212 
    209213 
    210214        // note: larger magnification for terrain to show single objects 
     
    216220        // the scale factor for the visualized bounding boxes 
    217221        mSceneMgr->setOption("NodeVizScale", &mVizScale); 
    218          
    219  
    220         // set culling algorithm type 
     222                 
     223        //-- set culling algorithm type 
    221224        setAlgorithm(mCurrentAlgorithm); 
    222225 
     
    236239        mTimeFrameEnded = mTimeFrameStarted = mTimer->getMilliseconds(); 
    237240         
    238         if (0 && (mSceneMgr->getSceneNode("robot Entity1Node")->getAttachedObject(0)->getMovableType() == "Entity")) 
     241        if (0 && (mSceneMgr->getSceneNode("robot Entity1Node")-> 
     242                getAttachedObject(0)->getMovableType() == "Entity")) 
    239243                Ogre::LogManager::getSingleton().logMessage("found entity"); 
    240          
     244 
     245        // init view cell parameters 
    241246        mSceneMgr->setOption("UseViewCells", &mUseViewCells); 
    242247        mSceneMgr->setOption("UseVisibilityFilter", &mUseVisibilityFilter); 
     
    244249        // reset statistics 
    245250        mWalkthroughStats.Reset(); 
     251 
    246252} 
    247253//----------------------------------------------------------------------- 
     
    508514                                                                                                bool useItemBuffer) 
    509515{ 
    510         // TODO: change this (does not work with other scene manager plugins) 
    511         VisibilityTerrainSceneManager *sm =  
    512                 dynamic_cast<VisibilityTerrainSceneManager *>(mSceneMgr); 
    513  
    514516        int itemBufferMode = useItemBuffer ? mItemBufferMode : 0; 
    515517         
     
    518520        queryModes |= GtpVisibility::QueryManager::GEOMETRY_VISIBILITY; 
    519521        queryModes |= GtpVisibility::QueryManager::NODE_VISIBILITY; 
    520          
    521         mQueryManager = new OcclusionQueriesQueryManager(sm->GetHierarchyInterface(), 
     522 
     523        // no visibility manager available => no visibility scene manager, return 
     524        GtpVisibility::VisibilityManager *visManager; 
     525         
     526        if (!mSceneMgr->getOption("VisibilityManager", visManager)) 
     527                return; 
     528 
     529        GtpVisibility::HierarchyInterface *hierarchyInterface; 
     530        if (!mSceneMgr->getOption("HierarchyInterface", hierarchyInterface)) 
     531                return; 
     532 
     533        mQueryManager = new OcclusionQueriesQueryManager(hierarchyInterface, 
    522534                        mWindow->getViewport(0), queryModes, itemBufferMode); 
    523535 
    524536        //mQueryManager = new PlatformQueryManager(sm->GetHierarchyInterface(), mWindow->getViewport(0), false); 
    525          
    526         sm->GetVisibilityManager()->SetQueryManager(mQueryManager); 
     537 
     538 
     539        visManager->SetQueryManager(mQueryManager); 
    527540 
    528541        GtpVisibility::NodeInfoContainer visibleNodes; 
     
    553566        float averageNodeVis = 0, averageGeometryVis = 0, averagePatchVis = 0; 
    554567        int geomSize = 0, nodesSize = 0, patchSize = 0; 
     568 
     569        /////////////////////////////////////////////////////////////////////////// 
     570        //-- apply queries on geometry level 
    555571 
    556572        GtpVisibility::MeshInfoContainer::iterator geomIt, geomIt_end = visibleGeometry.end(); 
     
    574590        } 
    575591 
     592 
     593 
     594        /////////////////////////////////////////////////////////////////////////// 
     595        //-- apply queries on node level 
     596 
     597 
    576598        GtpVisibility::NodeInfoContainer::iterator nodesIt, nodesIt_end = visibleNodes.end(); 
    577599 
     
    592614        } 
    593615 
     616 
     617        /////////////////////////////////////////////////////////////////////////// 
     618        //-- apply queries on patch level 
     619 
     620 
    594621        GtpVisibility::PatchInfoContainer::iterator patchIt, patchIt_end = visiblePatches.end(); 
    595622 
     
    609636                }        
    610637        } 
     638 
     639        /////////////////////////////////////////////////////////////// 
     640        //-- update visibility queries stats 
    611641 
    612642        if (nodesSize) 
     
    617647                averagePatchVis /= (float)patchSize; 
    618648 
    619         //-- update visibility queries stats 
     649 
    620650    try  
    621651        { 
     
    955985        mAlgorithmInfo->setCaption(": " + msAlgorithmCaptions[mCurrentAlgorithm]); 
    956986        mSceneMgr->setOption("Algorithm", &mCurrentAlgorithm); 
     987        std::stringstream d; d << "algorithm: " << msAlgorithmCaptions[mCurrentAlgorithm]; 
     988        if (1) Ogre::LogManager::getSingleton().logMessage(d.str()); 
    957989} 
    958990//----------------------------------------------------------------------- 
     
    10291061                } 
    10301062 
    1031                 /*std::stringstream d; 
    1032                 d << "fps: " << StringConverter::toString(currentFps) << ", " 
    1033                   << "avg fps: " << StringConverter::toString(avgFps); 
    1034                 LogManager::getSingleton().logMessage(d.str());*/ 
     1063                if (0) 
     1064                { 
     1065                        std::stringstream d; 
     1066                        d << "fps: " << StringConverter::toString(currentFps) << ", " 
     1067                          << "avg fps: " << StringConverter::toString(avgFps); 
     1068                        LogManager::getSingleton().logMessage(d.str()); 
     1069                } 
    10351070 
    10361071                //guiAvg->setCaption(avgFps + StringConverter::toString(stats.avgFPS)); 
  • GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TestCullingTerrainApplication.cpp

    r901 r924  
    1212#include "TestCullingTerrainApplication.h" 
    1313#include "TerrainFrameListener.h" 
    14 //#include "OgreVisibilityOctreeSceneManager.h" 
     14//#include "OgreOcclusionCullingSceneManager.h" 
    1515 
    1616#include "IVReader.h" 
     
    2121const static bool USE_STATIC_GEOMETRY = false; 
    2222bool TestCullingTerrainApplication::msShowHillyTerrain = false; 
    23 //bool TestCullingTerrainApplication::msShowHillyTerrain = true; 
     23 
     24 
    2425 
    2526/******************************************************/ 
     
    163164{ 
    164165} 
     166//------------------------------------------------------------------------- 
     167void TestCullingTerrainApplication::loadConfig(const String& filename) 
     168{ 
     169        // TODO matt 
     170        // Set up the options 
     171        ConfigFile config; 
     172        String val; 
     173 
     174        config.load(filename); 
     175 
     176        std::stringstream d; d << "reading config from: " << filename; 
     177        LogManager::getSingleton().logMessage(d.str()); 
     178 
     179        val = config.getSetting("Scene"); 
     180 
     181    if (!val.empty()) 
     182        { 
     183                 mFilename = val.c_str(); 
     184 
     185                 std::stringstream d; d << "filename: " << mFilename; 
     186                 LogManager::getSingleton().logMessage(d.str()); 
     187        } 
     188 
     189/*      val = config.getSetting("ViewCells"); 
     190 
     191        if (!val.empty()) 
     192        { 
     193                 mViewCellsFilename = val.c_str(); 
     194        }*/ 
     195} 
    165196//----------------------------------------------------------------------- 
    166197TestCullingTerrainApplication::~TestCullingTerrainApplication() 
     
    235266} 
    236267//----------------------------------------------------------------------- 
    237 void TestCullingTerrainApplication::LoadWorldGeometry() 
     268bool TestCullingTerrainApplication::LoadSceneIV(const String &filename,  
     269                                                                                                SceneNode *root,  
     270                                                                                                const int index) 
    238271{ 
    239272        mIVReader = new IVReader(); 
    240273 
    241         // _MAX_PATH is the maximum length allowed for a path 
    242         char currentPath[_MAX_PATH]; 
    243         // use the function to get the path 
    244         getcwd(currentPath, _MAX_PATH); 
    245          
    246  
    247         // $$matt TODO; use relatrive path 
    248         std::stringstream d; 
    249         d << "current path: " << currentPath; 
    250         Ogre::LogManager::getSingleton().logMessage(d.str()); 
    251  
    252         String path = "E:/svn/gametools/OGRE/trunk/resources/"; 
    253          
    254  
    255 /*      SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node1"); 
    256                  
    257         SceneNode *node2 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node2"); 
    258         SceneNode *node3 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node3"); 
    259         SceneNode *node4 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node4"); 
    260         SceneNode *node5 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node5"); 
    261         SceneNode *node6 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node6"); 
    262         SceneNode *node7 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node7"); 
    263  
    264  
    265  
    266         node2->translate(Vector3(-400, 0, 750)); 
    267         node3->scale(Vector3(100, 100 ,100)); 
    268         node3->pitch(Radian(3 * Math::HALF_PI)); 
    269         node4->translate(Vector3(-100, 0, 0)); 
    270         node5->translate(Vector3(0, 300, 0)); 
    271          
    272         node6->scale(Vector3(100, 100 ,100)); 
    273         node6->pitch(Radian(3 * Math::HALF_PI)); 
    274         node6->roll(Radian(Math::HALF_PI)); 
    275         node6->translate(Vector3(0, -100, 0)); 
    276  
    277         node7->scale(Vector3(100, 100 ,100));  
    278         node7->pitch(Radian(3 * Math::HALF_PI)); 
    279         node7->roll(Radian(Math::HALF_PI)); 
    280         node7->translate(Vector3(100, 0, 0)); 
    281          
    282         */ 
    283  
    284         Log *log = LogManager::getSingleton().createLog("IVLog.log"); 
    285         mIVReader->setLog(log); 
    286  
    287  
    288  
    289 #if 0 
    290         //String fileName = path + "media\\simple_geom.wrl"; 
    291         String fileName = path + "media\\city.wrl"; 
    292     //String fileName = path + "media\\house_test1.iv"; 
    293         mCamNode->setPosition(Vector3(-6, 0.5, 10)); 
    294         //mCamNode->setPosition(Vector3(412, 7.4, -667)); 
    295         mCamNode->setOrientation(Quaternion(-0.95, 0, 0.3, 0)); 
    296  
    297         if (0 && mIVReader->loadFile(fileName.c_str())) 
    298         { 
    299                 mIVReader->buildTree(mSceneMgr, node1); 
    300         } 
    301          
    302         String fileName = path + "media\\house_test1.iv"; 
    303  
    304         if (0 && mIVReader->loadFile(fileName.c_str())) 
    305         { 
    306                 mIVReader->buildTree(mSceneMgr, node1); 
    307                 mIVReader->buildTree(mSceneMgr, node2); 
    308         } 
    309  
    310         if (0 && mIVReader->loadFile("media\\anhk.wrl")) 
    311         { 
    312                 mIVReader->buildTree(mSceneMgr, node3); 
    313         } 
    314         if (0 && mIVReader->loadFile("media\\ant.wrl")) 
    315         { 
    316                 mIVReader->buildTree(mSceneMgr, node4); 
    317         } 
    318         if (0 && mIVReader->loadFile("media\\zepplin0.wrl")) 
    319         { 
    320                 mIVReader->buildTree(mSceneMgr, node5); 
    321         } 
    322         if (0 && mIVReader->loadFile("media\\warbird.wrl")) 
    323         { 
    324                 mIVReader->buildTree(mSceneMgr, node6); 
    325         } 
    326         if (0 && mIVReader->loadFile("media\\z_wing.wrl")) 
    327         { 
    328                 mIVReader->buildTree(mSceneMgr, node7); 
    329         } 
    330  
    331 #endif 
    332          
    333 #if 1 
    334         //-- load vienna model 
    335  
    336         SceneNode *roofsNode = NULL; 
    337         SceneNode *viennaNode = NULL; 
    338         SceneNode *roadsNode = NULL; 
    339         SceneNode *planeNode = NULL; 
    340         SceneNode *wallsNode = NULL; 
    341  
    342         viennaNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("Vienna"); 
    343  
    344         mCamNode->setPosition(Vector3(830, 300, -540)); 
    345         mCamNode->setOrientation(Quaternion(-0.3486, 0.0122, 0.9365, 0.0329)); 
     274        if (1) 
     275        { 
     276                std::string logFilename = "IVLog" + index; 
     277                logFilename += ".log"; 
     278 
     279                Log *log = LogManager::getSingleton().createLog(logFilename); 
     280                mIVReader->setLog(log); 
     281        } 
    346282         
    347283        //viennaNode->translate(Vector3(-300, -300, 0)); 
    348284 
    349         String fileName = path + "media\\city1500_flat_1.iv"; 
    350  
    351         if (0 && mIVReader->loadFile(fileName.c_str())) 
    352         { 
    353                 wallsNode = viennaNode->createChildSceneNode("Walls"); 
    354                 mIVReader->buildTree(mSceneMgr, wallsNode); 
    355         } 
    356  
    357  
    358         fileName = path + "media\\roofs_1500.iv"; 
    359         if (1 && mIVReader->loadFile(fileName.c_str())) 
    360         { 
    361                 roofsNode = viennaNode->createChildSceneNode("Roofs"); 
    362                 mIVReader->buildTree(mSceneMgr, roofsNode);      
    363         } 
    364      
    365         fileName = path + "media\\CityRoads60.iv"; 
    366         if (0 && mIVReader->loadFile(fileName.c_str())) 
    367         { 
    368                 roadsNode = viennaNode->createChildSceneNode("Roads"); 
    369                 mIVReader->buildTree(mSceneMgr, roadsNode);      
    370         } 
    371  
    372         fileName = path + "media\\CityPlane60.iv"; 
    373     if (0 && mIVReader->loadFile(fileName.c_str())) 
    374         { 
    375                 planeNode = viennaNode->createChildSceneNode("Plane"); 
    376                 mIVReader->buildTree(mSceneMgr, planeNode);              
    377         } 
    378          
    379 #endif 
     285        if (mIVReader->loadFile(filename.c_str())) 
     286        { 
     287                SceneNode *node = root->createChildSceneNode("IVSceneNode" + index); 
     288 
     289                mIVReader->buildTree(mSceneMgr, node); 
     290                //OGRE_DELETE(mIVReader); 
     291                return true; 
     292        } 
    380293 
    381294        mIVReader->collapse(); 
     
    386299                BakeSceneIntoStaticGeometry("staticVienna", "Vienna"); 
    387300        } 
     301         
     302        OGRE_DELETE(mIVReader); 
     303 
     304        return false; 
    388305} 
    389306//-------------------------------------------------------- 
     
    411328         
    412329        //roofsNode->detachAllObjects(); 
    413 //roadsNode->detachAllObjects(); 
    414 //      planeNode->detachAllObjects(); 
     330        //roadsNode->detachAllObjects(); 
     331        //      planeNode->detachAllObjects(); 
    415332         
    416333        //viennaNode->removeChild("Walls"); 
     
    421338void TestCullingTerrainApplication::createScene() 
    422339{ 
    423         if (!msShowHillyTerrain) 
    424                 LoadWorldGeometry(); 
     340        //-- load scene 
     341 
     342        //GtpVisibility::VisibilityManager *mVisManager; 
     343        //if (!mSceneMgr->getOption("VisibilityManager", mVisManager))  return; 
     344        //const std::string filename = visEnv->getSceneFilename(); 
     345        loadConfig("test.cfg"); 
     346        LoadScene(mFilename); 
     347 
     348 
     349 
     350        ///////////////////////////////////// 
    425351 
    426352        // Set ambient light 
     
    471397        if (0) 
    472398        { 
    473                 Plane plane; plane.normal = Vector3::UNIT_Y;    plane.d = -60; 
     399                Plane plane;  
     400                plane.normal = Vector3::UNIT_Y;  
     401                plane.d = -60; 
     402 
    474403                MeshManager::getSingleton().createPlane("Myplane", 
    475404                        ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, 
    476405                        5000,5000,100,100,true,1,5,5,Vector3::UNIT_Z); 
     406 
    477407                Entity* pPlaneEnt = mSceneMgr->createEntity( "plane", "Myplane" ); 
    478408                pPlaneEnt->setMaterialName("Examples/Rockwall"); 
     
    511441        } 
    512442 
    513         // HACK: load the view cells from the disc 
    514         //(dynamic_cast<VisibilityOctreeSceneManager *>(mSceneMgr))->LoadViewCells(""); 
    515  
     443 
     444 
     445        //-- HACK: load the view cells from the disc 
     446         
    516447        //std::string filename = "vienna_simple-21-04-avs2-viewCells.xml"; 
    517448        //std::string filename = "vienna_simple-21-04-kdcasm-viewCells.xml"; 
    518449        std::string filename = "vienna_simple-21-04-avs-viewCells.xml"; 
    519450 
    520         mSceneMgr->setOption("LoadViewCells", filename.c_str()); 
     451        //-- the actual loading happens here 
     452        if (0) mSceneMgr->setOption("LoadViewCells", filename.c_str()); 
    521453} 
    522454//----------------------------------------------------------------------- 
     
    620552        { 
    621553                //mSceneMgr = mRoot->createSceneManager("VisibilityTerrainSceneManager"); 
    622                 mSceneMgr = mRoot->createSceneManager("TerrainSceneManager"); 
     554                //mSceneMgr = mRoot->createSceneManager("TerrainSceneManager"); 
     555                mSceneMgr = mRoot->createSceneManager("OcclusionCullingSceneManager"); 
    623556        } 
    624557        else 
    625         {        
    626                 mSceneMgr = mRoot->createSceneManager("VisibilityOctreeSceneManager"); 
     558        {       //mSceneMgr = mRoot->createSceneManager("VisibilityTerrainSceneManager"); 
     559        //mSceneMgr = mRoot->createSceneManager("VisibilityOctreeSceneManager"); 
    627560                //mSceneMgr = mRoot->createSceneManager("OctreeSceneManager"); 
     561                mSceneMgr = mRoot->createSceneManager("OcclusionCullingSceneManager"); 
    628562        } 
    629563 
     
    666600                                mCamNode->getPosition().z); 
    667601         
    668                         /*std::stringstream d; 
     602                        /* 
     603                        std::stringstream d; 
    669604                        d << "World: " << it->movable->getWorldBoundingBox().getCenter().y << 
    670605                        ", Object: " << it->movable->getBoundingBox().getCenter().y << 
     
    683618} 
    684619 
     620//----------------------------------------------------------------------- 
     621// splits strings containing multiple file names 
     622static int SplitFilenames(const std::string str, std::vector<std::string> &filenames) 
     623{ 
     624        int pos = 0; 
     625 
     626        while(1)  
     627        { 
     628                int npos = (int)str.find(';', pos); 
     629                 
     630                if (npos < 0 || npos - pos < 1) 
     631                        break; 
     632                filenames.push_back(std::string(str, pos, npos - pos)); 
     633                pos = npos + 1; 
     634        } 
     635         
     636        filenames.push_back(std::string(str, pos, str.size() - pos)); 
     637        return (int)filenames.size(); 
     638} 
     639 
     640//----------------------------------------------------------------------- 
     641bool TestCullingTerrainApplication::LoadScene(const std::string filename) 
     642{ 
     643        using namespace std; 
     644        // use leaf nodes of the original spatial hierarchy as occludees 
     645        vector<string> filenames; 
     646        int files = SplitFilenames(filename, filenames); 
     647         
     648        std::stringstream d; 
     649        d << "number of input files: " << files << "\n"; 
     650        LogManager::getSingleton().logMessage(d.str()); 
     651 
     652        bool result = false; 
     653        vector<string>::const_iterator fit, fit_end = filenames.end(); 
     654        int i = 0; 
     655        // root for different files 
     656        for (fit = filenames.begin(); fit != fit_end; ++ fit, ++ i) 
     657        { 
     658                const string fn = *fit; 
     659 
     660                if (strstr(fn.c_str(), ".iv") || strstr(fn.c_str(), ".wrl")) 
     661                { 
     662                        // hack: set postion manually for vienna 
     663                        mCamNode->setPosition(Vector3(830, 300, -540)); 
     664                        mCamNode->setOrientation(Quaternion(-0.3486, 0.0122, 0.9365, 0.0329)); 
     665 
     666                        // load iv files 
     667                        LoadSceneIV(fn, mSceneMgr->getRootSceneNode(), i);                       
     668                } 
     669                else if (strstr(filename.c_str(), ".collada")) 
     670                { 
     671                        // load collada files 
     672                } 
     673                else if (filename == "terrain") 
     674                { 
     675                        // terrain hack 
     676                        msShowHillyTerrain = true; 
     677                        LogManager::getSingleton().logMessage("loading terrain"); 
     678                } 
     679         
     680                result = true; 
     681        } 
     682         
     683 
     684        /* 
     685        if (result)  
     686        { 
     687                int intersectables, faces; 
     688 
     689          std::stringstream d; 
     690          d << filename << " parsed successfully.\n" 
     691                << "#NUM_OBJECTS (Total numner of objects)\n" << intersectables << "\n" 
     692                << "#NUM_FACES (Total numner of faces)\n" << faces << "\n"; 
     693        } 
     694        */ 
     695         
     696        return result; 
     697} 
     698//----------------------------------------------------------------------- 
     699bool TestCullingTerrainApplication::LoadViewCells(const std::string filename) 
     700{ 
     701 
     702        return true; 
     703} 
    685704 
    686705 
  • GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TestCullingTerrainApplication.h

    r915 r924  
    124124        bool Clamp2FloorPlane(); 
    125125 
    126         /** Loads world geometry. 
     126        /** Loads iv geometry. 
    127127        */ 
    128         void LoadWorldGeometry(); 
     128        bool LoadSceneIV(const String &filename, SceneNode *root, const int index); 
    129129 
     130        bool LoadScene(const std::string filename); 
     131 
     132        bool LoadViewCells(const std::string filename); 
     133 
     134        /** Loads configuration from disc. 
     135        */ 
     136        void loadConfig(const String& filename); 
    130137        // if hilly terrain should be loaded 
    131138        static bool msShowHillyTerrain; 
     
    176183         
    177184        StaticGeometry *mStaticGeometry; 
     185 
     186        String mFilename; 
     187        //String mViewCellsFilename; 
     188 
    178189private: 
    179190        void chooseSceneManager(void); 
Note: See TracChangeset for help on using the changeset viewer.