Changeset 10055

Show
Ignore:
Timestamp:
04/21/09 12:20:56 (5 years ago)
Author:
robert
Message:

Fix for handling case of no graphics contexts being registered.

Merged from svn/trunk using:

svn merge -r 10053:10054 http://www.openscenegraph.org/svn/osg/OpenSceneGraph/trunk/src/osgDB/DatabasePager.cpp

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/branches/OpenSceneGraph-2.8/src/osgDB/DatabasePager.cpp

    • Property svn:mergeinfo set to /OpenSceneGraph/trunk/src/osgDB/DatabasePager.cpp:10054
    r9735 r10055  
    112112{ 
    113113public: 
    114     FindCompileableGLObjectsVisitor(DatabasePager::DataToCompile& dataToCompile,  
     114    FindCompileableGLObjectsVisitor(DatabasePager::DataToCompile* dataToCompile, 
    115115                               bool changeAutoUnRef, bool valueAutoUnRef, 
    116116                               bool changeAnisotropy, float valueAnisotropy, 
     
    128128            _kdTreeBuilder = osgDB::Registry::instance()->getKdTreeBuilder()->clone(); 
    129129        } 
    130          
    131     } 
    132      
     130    } 
     131 
    133132    META_NodeVisitor("osgDB","FindCompileableGLObjectsVisitor") 
    134      
     133 
    135134    virtual void apply(osg::Node& node) 
    136135    { 
     
    139138        traverse(node); 
    140139    } 
    141      
     140 
    142141    virtual void apply(osg::Geode& geode) 
    143142    { 
    144143        apply(geode.getStateSet()); 
    145      
     144 
    146145        for(unsigned int i=0;i<geode.getNumDrawables();++i) 
    147146        { 
     
    150149 
    151150        traverse(geode); 
    152          
     151 
    153152        if (_kdTreeBuilder.valid()) 
    154153        { 
    155154            geode.accept(*_kdTreeBuilder); 
    156155        } 
    157          
    158     } 
    159      
     156    } 
     157 
    160158    inline void apply(osg::StateSet* stateset) 
    161159    { 
     
    182180                            texture->setMaxAnisotropy(_valueAnisotropy); 
    183181                    } 
    184                      
     182 
    185183                    if (!_pager->isCompiled(texture)) 
    186184                    { 
     
    198196                } 
    199197            } 
    200             if (compileStateSet) 
    201             { 
    202                 _dataToCompile.first.insert(stateset); 
    203             } 
    204  
    205         } 
    206     } 
    207      
     198            if (compileStateSet && _dataToCompile) 
     199            { 
     200                _dataToCompile->first.insert(stateset); 
     201            } 
     202 
     203        } 
     204    } 
     205 
    208206    inline void apply(osg::Drawable* drawable) 
    209207    { 
     
    212210 
    213211        _drawableSet.insert(drawable); 
    214          
     212 
    215213        apply(drawable->getStateSet()); 
    216          
     214 
    217215        switch(_drawablePolicy) 
    218216        { 
     
    241239        // XXX This "compiles" VBOs too, but compilation doesn't do 
    242240        // anything for VBOs, does it? 
    243         if (drawable->getUseDisplayList() && !_pager->isCompiled(drawable)) 
     241        if (_dataToCompile && drawable->getUseDisplayList() && !_pager->isCompiled(drawable)) 
    244242        { 
    245243            // osg::notify(osg::NOTICE)<<"  Found compilable drawable"<<std::endl; 
    246             _dataToCompile.second.push_back(drawable); 
    247         } 
    248     } 
    249      
    250     DatabasePager::DataToCompile&           _dataToCompile; 
     244            _dataToCompile->second.push_back(drawable); 
     245        } 
     246    } 
     247     
     248    DatabasePager::DataToCompile*           _dataToCompile; 
    251249    bool                                    _changeAutoUnRef; 
    252250    bool                                    _valueAutoUnRef; 
     
    596594                ActiveGraphicsContexts::iterator itr = _pager->_activeGraphicsContexts.begin(); 
    597595 
    598                 DataToCompile& dtc = databaseRequest->_dataToCompileMap[*itr]; 
    599                 ++itr;                 
     596                DataToCompile* dtc = 0; 
     597                if (itr != _pager->_activeGraphicsContexts.end()) 
     598                { 
     599                    dtc = &(databaseRequest->_dataToCompileMap[*itr]); 
     600                    ++itr; 
     601                } 
    600602 
    601603                // find all the compileable rendering objects 
     
    620622                    !_pager->_activeGraphicsContexts.empty()) 
    621623                { 
    622                     if (!dtc.first.empty() || !dtc.second.empty()) 
     624                    if (!dtc->first.empty() || !dtc->second.empty()) 
    623625                    { 
    624626                        loadedObjectsNeedToBeCompiled = true;                 
     
    629631                            ++itr) 
    630632                        { 
    631                             databaseRequest->_dataToCompileMap[*itr] = dtc; 
     633                            databaseRequest->_dataToCompileMap[*itr] = *dtc; 
    632634                        } 
    633635                    } 
     
    645647 
    646648                    // find all the compileable rendering objects 
    647                     DatabasePager::FindCompileableGLObjectsVisitor frov(dtc,  
     649                    DatabasePager::FindCompileableGLObjectsVisitor frov(&dtc, 
    648650                                                         _pager->_changeAutoUnRef, _pager->_valueAutoUnRef, 
    649651                                                         _pager->_changeAnisotropy, _pager->_valueAnisotropy, 
     
    14941496    } 
    14951497 
    1496     META_NodeVisitor("osgDB","FindCompileableGLObjectsVisitor") 
     1498    META_NodeVisitor("osgDB","MarkPagedLODsVisitor") 
    14971499 
    14981500    virtual void apply(osg::PagedLOD& plod)