Show
Ignore:
Timestamp:
07/21/08 19:28:22 (6 years ago)
Author:
robert
Message:

Added basic image sequencing

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgimagesequence/osgimagesequence.cpp

    r8637 r8642  
    3636// 
    3737 
    38  
    39 typedef std::vector< osg::ref_ptr<osg::Image> > ImageList; 
    40  
    41  
    42 class MyGraphicsContext { 
    43     public: 
    44         MyGraphicsContext() 
     38struct ImageUpdateCallback : public osg::StateAttribute::Callback 
     39{ 
     40    /** do customized update code.*/ 
     41    virtual void operator () (osg::StateAttribute* attr, osg::NodeVisitor* nv) 
     42    { 
     43        const osg::FrameStamp* fs = nv!=0 ? nv->getFrameStamp() : 0; 
     44        osg::Texture2D* texture2D = dynamic_cast<osg::Texture2D*>(attr); 
     45        if (texture2D && texture2D->getImage() && fs) 
    4546        { 
    46             osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; 
    47             traits->x = 0; 
    48             traits->y = 0; 
    49             traits->width = 1; 
    50             traits->height = 1; 
    51             traits->windowDecoration = false; 
    52             traits->doubleBuffer = false; 
    53             traits->sharedContext = 0; 
    54             traits->pbuffer = true; 
    55  
    56             _gc = osg::GraphicsContext::createGraphicsContext(traits.get()); 
    57  
    58             if (!_gc) 
    59             { 
    60                 traits->pbuffer = false; 
    61                 _gc = osg::GraphicsContext::createGraphicsContext(traits.get()); 
    62             } 
    63  
    64             if (_gc.valid())  
    65             { 
    66                 _gc->realize(); 
    67                 _gc->makeCurrent(); 
    68             } 
     47            texture2D->getImage()->update(fs); 
    6948        } 
    70          
    71         bool valid() const { return _gc.valid() && _gc->isRealized(); } 
    72          
    73     private: 
    74         osg::ref_ptr<osg::GraphicsContext> _gc; 
     49    } 
    7550}; 
    76  
    7751 
    7852osg::StateSet* createState() 
     
    9064    imageSequence->addImage(image_3.get(), 0.25); 
    9165 
    92     imageSequence->setImage(image_0->s(),image_0->t(),image_0->r(), 
    93                   image_0->getInternalTextureFormat(), 
    94                   image_0->getPixelFormat(),image_0->getDataType(), 
    95                   image_0->data(), 
    96                   osg::Image::NO_DELETE, 
    97                   image_0->getPacking()); 
    98  
    9966    osg::Texture2D* texture = new osg::Texture2D; 
    10067    texture->setFilter(osg::Texture2D::MIN_FILTER,osg::Texture2D::LINEAR); 
     
    10370    texture->setResizeNonPowerOfTwoHint(false); 
    10471    texture->setImage(imageSequence.get()); 
     72    //texture->setTextureSize(512,512); 
     73     
     74    texture->setUpdateCallback(new ImageUpdateCallback); 
    10575 
    10676    // create the StateSet to store the texture data 
    10777    osg::StateSet* stateset = new osg::StateSet; 
     78 
    10879    stateset->setTextureAttributeAndModes(0,texture,osg::StateAttribute::ON); 
    10980