Show
Ignore:
Timestamp:
07/06/07 15:08:51 (7 years ago)
Author:
robert
Message:

Added include/osg/GLObjects + .cpp which provide osg::flush*DeletedGLObjects() methods.

Added and cleaned up DeleteHandler? calls in osgViewer to help avoid crashes on exit.

Changed DatabasePager? across to dynamically checcking osg::getCompileContext(..)

Updated wrappers.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgDB/DatabasePager.cpp

    r7038 r7074  
    293293            startThread(); 
    294294        } 
    295                  
    296295    } 
    297296} 
     
    595594                } 
    596595                 
    597                 if (loadedObjectsNeedToBeCompiled && !_compileGraphicsContexts.empty()) 
    598                 { 
    599                     for(CompileGraphicsContexts::iterator citr = _compileGraphicsContexts.begin(); 
    600                         citr != _compileGraphicsContexts.end(); 
    601                         ++citr) 
     596                if (loadedObjectsNeedToBeCompiled) 
     597                { 
     598                    for(ActiveGraphicsContexts::iterator itr = _activeGraphicsContexts.begin(); 
     599                        itr != _activeGraphicsContexts.end(); 
     600                        ++itr) 
    602601                    { 
    603                         osg::GraphicsContext* gc = citr->get(); 
     602                        osg::GraphicsContext* gc = osg::GraphicsContext::getCompileContext(*itr); 
    604603                        if (gc) 
    605604                        {    
    606                             osg::OperationsThread* gt = gc->getGraphicsThread();                             
    607                             if (gt) gt->add(new DatabasePager::CompileOperation(this)); 
     605                            osg::OperationsThread* gt = gc->getGraphicsThread(); 
     606                            if (gt) 
     607                            { 
     608                                gt->add(new DatabasePager::CompileOperation(this)); 
     609                            } 
    608610                            else 
    609611                            { 
    610612                                gc->makeCurrent(); 
    611                                  
    612                                 // osg::notify(osg::NOTICE)<<"Database pager thread compiling"<<std::endl; 
    613613                                 
    614614                                compileAllGLObjects(*(gc->getState())); 
     
    618618                        } 
    619619                    } 
     620 
    620621                    // osg::notify(osg::NOTICE)<<"Done compiling in paging thread"<<std::endl;                    
    621622                } 
     
    884885} 
    885886 
    886 void DatabasePager::addCompileGraphicsContext(osg::GraphicsContext* gc) 
    887 { 
    888     for(CompileGraphicsContexts::iterator itr = _compileGraphicsContexts.begin(); 
    889         itr != _compileGraphicsContexts.end(); 
    890         ++itr) 
    891     { 
    892         if (*itr == gc) 
    893         { 
    894             return; 
    895         } 
    896     } 
    897      
    898     _compileGraphicsContexts.push_back(gc); 
    899      
    900     setCompileGLObjectsForContextID(gc->getState()->getContextID(),true); 
    901 } 
    902  
    903 void DatabasePager::removeCompileGraphicsContext(osg::GraphicsContext* gc) 
    904 { 
    905     for(CompileGraphicsContexts::iterator itr = _compileGraphicsContexts.begin(); 
    906         itr != _compileGraphicsContexts.end(); 
    907         ++itr) 
    908     { 
    909         if (*itr == gc) 
    910         { 
    911             _compileGraphicsContexts.erase(itr); 
    912             return; 
    913         } 
    914     } 
    915 } 
    916  
    917887void DatabasePager::setCompileGLObjectsForContextID(unsigned int contextID, bool on) 
    918888{ 
     
    952922{ 
    953923    if (_activeGraphicsContexts.count(contextID)==0) return false; 
    954      
    955     for(CompileGraphicsContexts::const_iterator citr = _compileGraphicsContexts.begin(); 
    956         citr != _compileGraphicsContexts.end(); 
    957         ++citr) 
    958     { 
    959         const osg::GraphicsContext* gc = citr->get(); 
    960         if (gc && gc->getState()->getContextID()==contextID) return false; 
    961     } 
    962  
    963     return true;     
     924 
     925    return osg::GraphicsContext::getCompileContext(contextID)==0; 
    964926} 
    965927