Show
Ignore:
Timestamp:
10/06/08 19:02:20 (6 years ago)
Author:
robert
Message:

Refactored ImageSequence? to provided a cleaner and more robust implementation

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/include/osg/ImageSequence

    r8758 r8990  
    2020 
    2121#include <list> 
     22#include <set> 
    2223 
    2324namespace osg { 
     
    4950        virtual double getTimeMultiplier() const { return _timeMultiplier; } 
    5051 
    51         typedef std::list< osg::ref_ptr<osg::Image> >   Images; 
    52         typedef std::list< std::string >                FileNames; 
     52        typedef std::vector< osg::ref_ptr<osg::Image> >   Images; 
     53        typedef std::vector< std::string >                FileNames; 
    5354         
    5455        virtual void seek(double time); 
     
    7677        void addImageFile(const std::string& fileName); 
    7778         
     79        void setImageFile(unsigned int pos, const std::string& fileName); 
     80        std::string getImageFile(unsigned int pos) const; 
     81         
     82        unsigned int getNumImageFiles() const { return _fileNames.size(); } 
     83 
    7884        FileNames& getFileNames() { return _fileNames; } 
    7985        const FileNames& getFileNames() const { return _fileNames; } 
     
    8187        void addImage(osg::Image* image); 
    8288         
     89        void setImage(int s,int t,int r, 
     90                      GLint internalTextureformat, 
     91                      GLenum pixelFormat,GLenum type, 
     92                      unsigned char* data, 
     93                      AllocationMode mode, 
     94                      int packing=1) { Image::setImage(s,t,r,internalTextureformat, pixelFormat, type, data, mode, packing); } 
     95 
     96        void setImage(unsigned int pos, osg::Image* image); 
     97        Image* getImage(unsigned int pos); 
     98        const Image* getImage(unsigned int pos) const; 
     99         
     100        unsigned int getNumImages() const { return _images.size(); } 
     101 
    83102        Images& getImages() { return _images; } 
    84103        const Images& getImages() const { return _images; } 
     
    96115        virtual ~ImageSequence() {} 
    97116         
     117        virtual void applyLoopingMode(); 
     118 
    98119        void setImageToChild(const osg::Image* image); 
    99120         
    100121        void computeTimePerImage(); 
     122 
     123        int imageIndex(double time); 
     124 
    101125 
    102126        double                          _referenceTime; 
     
    108132        double                          _timePerImage; 
    109133 
    110         OpenThreads::Mutex              _mutex; 
     134        mutable OpenThreads::Mutex      _mutex; 
    111135        FileNames                       _fileNames; 
    112         FileNames::iterator             _fileNamesIterator; 
    113         double                          _fileNamesIteratorTime; 
    114136 
    115137        Images                          _images; 
    116138         
    117         typedef std::pair< std::string, osg::ref_ptr<osg::Image> >  FileNameImagePair; 
    118         typedef std::list< FileNameImagePair >  FileNameImageList; 
    119         FileNameImageList               _filesRequested; 
     139        typedef std::set< std::string > FilesRequested; 
     140        FilesRequested                  _filesRequested; 
     141         
     142        int                             _previousAppliedImageIndex; 
    120143                 
    121         Images::iterator                _imageIterator; 
    122         double                          _imageIteratorTime; 
    123144         
    124145        bool                            _seekTimeSet; 
    125146        double                          _seekTime; 
     147         
    126148         
    127149