Changeset 13318

Show
Ignore:
Timestamp:
11/09/15 17:13:03 (2 years ago)
Author:
robert
Message:

Release OpenSceneGraph-3.5.1

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgPresentation/Timeout.cpp

    r13317 r13318  
    1717 
    1818using namespace osgPresentation; 
     19 
     20 
     21class OperationVisitor : public osg::NodeVisitor 
     22{ 
     23public: 
     24 
     25    enum Operation 
     26    { 
     27        ENTER, 
     28        LEAVE, 
     29        RESET 
     30    }; 
     31     
     32    OperationVisitor(Operation op) : osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN), _operation(op), _sleepTime(0.0) {} 
     33 
     34    void apply(osg::Node& node) 
     35    { 
     36        if (node.getStateSet()) process(node.getStateSet()); 
     37        traverse(node); 
     38    } 
     39 
     40    void apply(osg::Geode& geode) 
     41    { 
     42        apply(static_cast<osg::Node&>(geode)); 
     43 
     44        for(unsigned int i=0;i<geode.getNumDrawables();++i) 
     45        { 
     46            osg::Drawable* drawable = geode.getDrawable(i); 
     47            if (drawable->getStateSet()) process(drawable->getStateSet()); 
     48        } 
     49    } 
     50 
     51    virtual void process(osg::StateSet* ss) 
     52    { 
     53        for(unsigned int i=0;i<ss->getTextureAttributeList().size();++i) 
     54        { 
     55            osg::Texture* texture = dynamic_cast<osg::Texture*>(ss->getTextureAttribute(i,osg::StateAttribute::TEXTURE)); 
     56            osg::Image* image = texture ? texture->getImage(0) : 0; 
     57            osg::ImageStream* imageStream = dynamic_cast<osg::ImageStream*>(image); 
     58            if (imageStream) process(imageStream); 
     59        } 
     60    } 
     61 
     62    void process(osg::ImageStream* video) 
     63    { 
     64        if (_operation==ENTER) 
     65        { 
     66            video->rewind(); 
     67            video->play(); 
     68 
     69            _sleepTime = 0.2; 
     70        } 
     71        else if (_operation==LEAVE) 
     72        { 
     73            video->pause(); 
     74        } 
     75        else if (_operation==RESET) 
     76        { 
     77            video->rewind(); 
     78 
     79            _sleepTime = 0.2; 
     80        } 
     81    } 
     82 
     83    double sleepTime() const { return _sleepTime; } 
     84 
     85    Operation   _operation; 
     86    double      _sleepTime;     
     87}; 
    1988 
    2089 
     
    248317                broadcastEvent(viewer, _displayBroadcastKeyPos); 
    249318            } 
     319 
     320            OperationVisitor leave(OperationVisitor::ENTER); 
     321            accept(leave); 
     322 
     323            if (leave.sleepTime()!=0.0) 
     324            { 
     325                OSG_NOTICE<<"Pausing for "<<leave.sleepTime()<<std::endl; 
     326                OpenThreads::Thread::microSleep(static_cast<unsigned int>(1000000.0*leave.sleepTime())); 
     327                OSG_NOTICE<<"Finished Pause "<<std::endl; 
     328            } 
     329 
    250330        } 
    251331 
     
    258338                broadcastEvent(viewer, _dismissBroadcastKeyPos); 
    259339            } 
     340 
     341            OperationVisitor leave(OperationVisitor::LEAVE); 
     342            accept(leave); 
    260343        } 
    261344