Changeset 7146

Show
Ignore:
Timestamp:
07/22/07 22:33:20
Author:
robert
Message:

Added support for using the CompileContext? to do GL object deletion.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • OpenSceneGraph/trunk/src/osgViewer/CompositeViewer.cpp

    r7097 r7146  
    565565    { 
    566566        _sceneView->getCullVisitor()->setDatabaseRequestHandler(_databasePager.get()); 
     567         
     568        _flushOperation = new osg::FlushDeletedGLObjectsOperation(0.1); 
    567569    } 
    568570     
     
    578580        if (view) _sceneView->setFusionDistance(view->getFusionDistanceMode(), view->getFusionDistanceValue()); 
    579581 
     582        osg::GraphicsContext* compileContext = osg::GraphicsContext::getCompileContext(_sceneView->getState()->getContextID()); 
     583        osg::GraphicsThread* compileThread = compileContext ? compileContext->getGraphicsThread() : 0; 
     584 
    580585        _sceneView->inheritCullSettings(*(_sceneView->getCamera())); 
    581586        _sceneView->cull(); 
     
    589594        } 
    590595 
    591         _sceneView->flushDeletedGLObjects(availableTime); 
    592     } 
    593      
    594     osg::observer_ptr<osgUtil::SceneView>    _sceneView; 
    595     osg::observer_ptr<osgDB::DatabasePager>  _databasePager; 
     596        if (compileThread) 
     597        { 
     598            compileThread->add(_flushOperation.get()); 
     599        } 
     600        else 
     601        { 
     602            _sceneView->flushDeletedGLObjects(availableTime); 
     603        } 
     604    } 
     605     
     606    osg::observer_ptr<osgUtil::SceneView>               _sceneView; 
     607    osg::observer_ptr<osgDB::DatabasePager>             _databasePager; 
     608    osg::ref_ptr<osg::FlushDeletedGLObjectsOperation>   _flushOperation; 
    596609}; 
    597610 
  • OpenSceneGraph/trunk/src/osgViewer/Viewer.cpp

    r7120 r7146  
    138138    { 
    139139        _sceneView->getCullVisitor()->setDatabaseRequestHandler(_databasePager.get()); 
     140         
     141        _flushOperation = new osg::FlushDeletedGLObjectsOperation(0.1); 
    140142    } 
    141143     
     
    203205             _databasePager->compileGLObjects(*(_sceneView->getState()), availableTime); 
    204206        } 
    205         _sceneView->flushDeletedGLObjects(availableTime); 
     207 
     208        osg::GraphicsContext* compileContext = osg::GraphicsContext::getCompileContext(_sceneView->getState()->getContextID()); 
     209        osg::GraphicsThread* compileThread = compileContext ? compileContext->getGraphicsThread() : 0; 
     210 
     211        if (compileThread) 
     212        { 
     213            compileThread->add(_flushOperation.get()); 
     214        } 
     215        else 
     216        { 
     217            _sceneView->flushDeletedGLObjects(availableTime); 
     218        } 
    206219 
    207220        if (aquireGPUStats) 
     
    226239    } 
    227240     
    228     osg::observer_ptr<osgUtil::SceneView>       _sceneView; 
    229     osg::observer_ptr<osgDB::DatabasePager>     _databasePager; 
     241    osg::observer_ptr<osgUtil::SceneView>               _sceneView; 
     242    osg::observer_ptr<osgDB::DatabasePager>             _databasePager; 
     243    osg::ref_ptr<osg::FlushDeletedGLObjectsOperation>   _flushOperation; 
    230244 
    231245}; 
     
    262276        } 
    263277     
     278         
     279        _flushOperation = new osg::FlushDeletedGLObjectsOperation(0.1); 
     280 
    264281        // osg::notify(osg::NOTICE)<<"constructed"<<std::endl; 
    265282    } 
     
    367384        osgUtil::SceneView* sceneView = _sceneView[_currentDraw].get(); 
    368385         
     386        osg::GraphicsContext* compileContext = osg::GraphicsContext::getCompileContext(sceneView->getState()->getContextID()); 
     387        osg::GraphicsThread* compileThread = compileContext ? compileContext->getGraphicsThread() : 0; 
     388 
    369389        if (sceneView || _done) 
    370390        { 
     
    428448            } 
    429449 
    430             sceneView->flushDeletedGLObjects(availableTime); 
     450            if (compileThread) 
     451            { 
     452                compileThread->add(_flushOperation.get()); 
     453            } 
     454            else 
     455            { 
     456                sceneView->flushDeletedGLObjects(availableTime); 
     457            } 
    431458 
    432459            if (aquireGPUStats) 
     
    457484        osgUtil::SceneView* sceneView = _sceneView[_currentDraw].get(); 
    458485        if (!sceneView || _done) return; 
     486 
     487        osg::GraphicsContext* compileContext = osg::GraphicsContext::getCompileContext(sceneView->getState()->getContextID()); 
     488        osg::GraphicsThread* compileThread = compileContext ? compileContext->getGraphicsThread() : 0; 
    459489 
    460490        OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex[_currentDraw]); 
     
    516546            _databasePager->compileGLObjects(*(sceneView->getState()), availableTime); 
    517547        } 
    518         sceneView->flushDeletedGLObjects(availableTime); 
     548 
     549        if (compileThread) 
     550        { 
     551            compileThread->add(_flushOperation.get()); 
     552        } 
     553        else 
     554        { 
     555            sceneView->flushDeletedGLObjects(availableTime); 
     556        } 
    519557 
    520558        if (aquireGPUStats) 
     
    590628    osg::observer_ptr<osgDB::DatabasePager> _databasePager; 
    591629 
     630    osg::ref_ptr<osg::FlushDeletedGLObjectsOperation> _flushOperation; 
    592631 
    593632};