Show
Ignore:
Timestamp:
04/24/09 18:20:50 (6 years ago)
Author:
robert
Message:

Introduce new run frame rate management support to allow control of maximum frame rate and to support on demand rendering of frames

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/include/osgViewer/ViewerBase

    r9917 r10098  
    200200        void checkWindowStatus(); 
    201201 
    202  
     202        enum FrameScheme 
     203        { 
     204            ON_DEMAND, 
     205            CONTINUOUS 
     206        }; 
     207 
     208        void setRunFrameScheme(FrameScheme fs) { _runFrameScheme = fs; } 
     209        FrameScheme getRunFrameScheme() const { return _runFrameScheme; } 
     210 
     211        void setRunMaxFrameRate(double frameRate) { _runMaxFrameRate = frameRate; } 
     212        double getRunMaxFrameRate() const { return _runMaxFrameRate; } 
    203213 
    204214        /** Execute a main frame loop. 
     
    207217          * and installs trackball manipulator if one is not already assigned. 
    208218          */ 
    209         virtual int run() = 0; 
     219        virtual int run(); 
     220 
     221        /** check to see if the new frame is required, called by run(..) when FrameScheme is set to ON_DEMAND.*/ 
     222        virtual bool checkNeedToDoFrame() = 0; 
    210223 
    211224        /** Render a complete new frame. 
     
    250263         
    251264    protected: 
    252      
     265 
     266        void viewerBaseInit(); 
     267 
     268        friend class osgViewer::View; 
     269 
    253270        inline void makeCurrent(osg::GraphicsContext* gc) 
    254271        { 
    255272            if (_currentContext==gc) return; 
    256              
     273 
    257274            releaseContext(); 
    258              
     275 
    259276            if (gc && gc->valid() && gc->makeCurrent()) _currentContext = gc; 
    260277        } 
    261          
     278 
    262279        inline void releaseContext() 
    263280        { 
     
    276293        bool                                                _quitEventSetsDone; 
    277294        bool                                                _releaseContextAtEndOfFrameHint; 
    278          
     295 
    279296        ThreadingModel                                      _threadingModel; 
    280297        bool                                                _threadsRunning; 
     298 
     299        bool                                                _requestRedraw; 
     300        bool                                                _requestContinousUpdate; 
     301 
     302        FrameScheme                                         _runFrameScheme; 
     303        double                                              _runMaxFrameRate; 
     304 
    281305 
    282306        BarrierPosition                                     _endBarrierPosition; 
     
    285309        osg::ref_ptr<osg::BarrierOperation>                 _endRenderingDispatchBarrier; 
    286310        osg::ref_ptr<osg::EndOfDynamicDrawBlock>            _endDynamicDrawBlock; 
    287          
     311 
    288312        osg::ref_ptr<osgGA::EventVisitor>                   _eventVisitor; 
    289          
     313 
    290314        osg::ref_ptr<osg::OperationQueue>                   _updateOperations; 
    291315        osg::ref_ptr<osgUtil::UpdateVisitor>                _updateVisitor; 
    292          
     316 
    293317        osg::ref_ptr<osg::Operation>                        _realizeOperation; 
    294318        osg::ref_ptr<osgUtil::IncrementalCompileOperation>  _incrementalCompileOperation;