Changeset 7018

Show
Ignore:
Timestamp:
06/22/07 16:48:43 (8 years ago)
Author:
robert
Message:

Added optional set up of pbuffers for background compilation of the OpenGL objects
when database paging.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/applications/osgviewer/osgviewer.cpp

    r6955 r7018  
    7575    } 
    7676 
     77    bool createBackgroundContextForCompiling = false; 
     78    while (arguments.read("--bc")) { createBackgroundContextForCompiling = true; } 
     79 
     80    bool createBackgroundThreadsForCompiling = false; 
     81    while (arguments.read("--bt")) { createBackgroundContextForCompiling = true; createBackgroundThreadsForCompiling = true; } 
     82 
    7783    // set up the camera manipulators. 
    7884    { 
     
    144150    viewer.setSceneData( loadedModel.get() ); 
    145151 
     152    viewer.realize(); 
     153     
     154    if (createBackgroundContextForCompiling) 
     155    { 
     156     
     157        int numProcessors = OpenThreads::GetNumberOfProcessors(); 
     158        int processNum = 0; 
     159 
     160        osgDB::DatabasePager* dp = viewer.getScene()->getDatabasePager(); 
     161        typedef std::vector< osg::ref_ptr<osg::GraphicsContext> > CompileContexts; 
     162        CompileContexts compileContexts; 
     163 
     164        osgViewer::Viewer::Windows windows; 
     165        viewer.getWindows(windows); 
     166        for(osgViewer::Viewer::Windows::iterator itr = windows.begin(); 
     167            itr != windows.end(); 
     168            ++itr) 
     169        { 
     170            const osg::GraphicsContext::Traits* src_traits = (*itr)->getTraits(); 
     171 
     172            osg::GraphicsContext::Traits* traits = new osg::GraphicsContext::Traits; 
     173            traits->screenNum = src_traits->screenNum; 
     174            traits->displayNum = src_traits->displayNum; 
     175            traits->hostName = src_traits->hostName; 
     176            traits->width = 100; 
     177            traits->height = 100; 
     178            traits->red = src_traits->red; 
     179            traits->green = src_traits->green; 
     180            traits->blue = src_traits->blue; 
     181            traits->alpha = src_traits->alpha; 
     182            traits->depth = src_traits->depth; 
     183            traits->sharedContext = (*itr); 
     184            traits->pbuffer = true; 
     185 
     186            osg::GraphicsContext* gc = osg::GraphicsContext::createGraphicsContext(traits); 
     187 
     188            gc->realize(); 
     189 
     190 
     191            if (createBackgroundThreadsForCompiling) 
     192            { 
     193                gc->createGraphicsThread(); 
     194                gc->getGraphicsThread()->setProcessorAffinity(processNum % numProcessors); 
     195                gc->getGraphicsThread()->startThread(); 
     196                 
     197                ++processNum; 
     198            } 
     199 
     200            dp->addCompileGraphicsContext(gc); 
     201 
     202            compileContexts.push_back(gc); 
     203        } 
     204    } 
     205     
     206 
    146207    return viewer.run(); 
    147208}