Updated wrappers, and further refined the ImageSequence API
This commit is contained in:
@@ -41,10 +41,9 @@ ImageSequence::ImageSequence()
|
||||
_referenceTime = DBL_MAX;
|
||||
_timeMultiplier = 1.0;
|
||||
|
||||
_mode = PRE_LOAD_ALL_IMAGES;
|
||||
_duration = 1.0;
|
||||
_preLoadTime = 1.0;
|
||||
_timePerImage = 1.0;
|
||||
_pruneOldImages = true;
|
||||
|
||||
_fileNamesIterator = _fileNames.end();
|
||||
_fileNamesIteratorTime = DBL_MAX;
|
||||
@@ -57,10 +56,9 @@ ImageSequence::ImageSequence(const ImageSequence& is,const CopyOp& copyop):
|
||||
osg::ImageStream(is,copyop),
|
||||
_referenceTime(is._referenceTime),
|
||||
_timeMultiplier(is._timeMultiplier),
|
||||
_mode(is._mode),
|
||||
_duration(is._duration),
|
||||
_timePerImage(is._timePerImage),
|
||||
_preLoadTime(is._preLoadTime),
|
||||
_pruneOldImages(is._pruneOldImages)
|
||||
_timePerImage(is._timePerImage)
|
||||
{
|
||||
_fileNamesIterator = _fileNames.end();
|
||||
_fileNamesIteratorTime = DBL_MAX;
|
||||
@@ -162,6 +160,8 @@ void ImageSequence::setImageToChild(const osg::Image* image)
|
||||
{
|
||||
// osg::notify(osg::NOTICE)<<"setImageToChild("<<image<<")"<<std::endl;
|
||||
|
||||
if (image==0) return;
|
||||
|
||||
setImage(image->s(),image->t(),image->r(),
|
||||
image->getInternalTextureFormat(),
|
||||
image->getPixelFormat(),image->getDataType(),
|
||||
@@ -195,15 +195,47 @@ void ImageSequence::update(osg::NodeVisitor* nv)
|
||||
}
|
||||
|
||||
double time = (fs->getSimulationTime() - _referenceTime)*_timeMultiplier;
|
||||
double preLoadTime = (time+_preLoadTime)*_timeMultiplier;
|
||||
|
||||
FileNames::iterator previous_fileNamesIterator = _fileNamesIterator;
|
||||
Images::iterator previous_imageIterator = _imageIterator;
|
||||
|
||||
bool pruneOldImages = false;
|
||||
|
||||
bool looping = getLoopingMode()==LOOPING;
|
||||
|
||||
switch(_mode)
|
||||
{
|
||||
case(PRE_LOAD_ALL_IMAGES):
|
||||
{
|
||||
if (_fileNames.size()>_images.size())
|
||||
{
|
||||
for(unsigned int i=_images.size(); i<_fileNames.size(); ++i)
|
||||
{
|
||||
osg::Image* image = irh->readImageFile(_fileNames[i]);
|
||||
_images.push_back(image);
|
||||
}
|
||||
}
|
||||
|
||||
irh = 0;
|
||||
break;
|
||||
}
|
||||
case(PAGE_AND_RETAIN_IMAGES):
|
||||
{
|
||||
break;
|
||||
}
|
||||
case(PAGE_AND_DISCARD_USED_IMAGES):
|
||||
{
|
||||
pruneOldImages = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// osg::notify(osg::NOTICE)<<"time = "<<time<<std::endl;
|
||||
|
||||
if (irh)
|
||||
{
|
||||
double preLoadTime = (time+irh->getPreLoadTime())*_timeMultiplier;
|
||||
|
||||
//
|
||||
// Advance imageIterator
|
||||
//
|
||||
@@ -254,7 +286,7 @@ void ImageSequence::update(osg::NodeVisitor* nv)
|
||||
if (_imageIterator ==_images.end())
|
||||
{
|
||||
|
||||
if (_pruneOldImages)
|
||||
if (pruneOldImages)
|
||||
{
|
||||
_images.erase(previous_imageIterator, _imageIterator);
|
||||
previous_imageIterator = _images.begin();
|
||||
@@ -274,7 +306,7 @@ void ImageSequence::update(osg::NodeVisitor* nv)
|
||||
|
||||
if (_imageIterator!=_images.end() && previous_imageIterator != _imageIterator)
|
||||
{
|
||||
if (_pruneOldImages)
|
||||
if (pruneOldImages)
|
||||
{
|
||||
_images.erase(previous_imageIterator, _imageIterator);
|
||||
}
|
||||
|
||||
@@ -244,6 +244,9 @@ ImagePager::ImagePager():
|
||||
_imageThreads.push_back(new ImageThread(this, ImageThread::HANDLE_ALL_REQUESTS, "Image Thread 1"));
|
||||
_imageThreads.push_back(new ImageThread(this, ImageThread::HANDLE_ALL_REQUESTS, "Image Thread 2"));
|
||||
_imageThreads.push_back(new ImageThread(this, ImageThread::HANDLE_ALL_REQUESTS, "Image Thread 3"));
|
||||
|
||||
// 100ms
|
||||
_preLoadTime = 0.1;
|
||||
}
|
||||
|
||||
ImagePager::~ImagePager()
|
||||
@@ -279,6 +282,11 @@ int ImagePager::cancel()
|
||||
return result;
|
||||
}
|
||||
|
||||
osg::Image* ImagePager::readImageFile(const std::string& fileName)
|
||||
{
|
||||
return osgDB::readImageFile(fileName);
|
||||
}
|
||||
|
||||
void ImagePager::requestImageFile(const std::string& fileName,osg::Object* attachmentPoint, double timeToMergeBy, const osg::FrameStamp* framestamp)
|
||||
{
|
||||
// osg::notify(osg::NOTICE)<<"ImagePager::requestNodeFile("<<fileName<<")"<<std::endl;
|
||||
|
||||
@@ -27,7 +27,14 @@
|
||||
|
||||
TYPE_NAME_ALIAS(std::list< osg::ref_ptr< osg::Image > >, osg::ImageSequence::Images)
|
||||
|
||||
TYPE_NAME_ALIAS(std::list< std::string >, osg::ImageSequence::FileNames)
|
||||
TYPE_NAME_ALIAS(std::vector< std::string >, osg::ImageSequence::FileNames)
|
||||
|
||||
BEGIN_ENUM_REFLECTOR(osg::ImageSequence::Mode)
|
||||
I_DeclaringFile("osg/ImageSequence");
|
||||
I_EnumLabel(osg::ImageSequence::PRE_LOAD_ALL_IMAGES);
|
||||
I_EnumLabel(osg::ImageSequence::PAGE_AND_RETAIN_IMAGES);
|
||||
I_EnumLabel(osg::ImageSequence::PAGE_AND_DISCARD_USED_IMAGES);
|
||||
END_REFLECTOR
|
||||
|
||||
BEGIN_OBJECT_REFLECTOR(osg::ImageSequence)
|
||||
I_DeclaringFile("osg/ImageSequence");
|
||||
@@ -89,6 +96,16 @@ BEGIN_OBJECT_REFLECTOR(osg::ImageSequence)
|
||||
__double__getTimeMultiplier,
|
||||
"",
|
||||
"");
|
||||
I_Method1(void, setMode, IN, osg::ImageSequence::Mode, mode,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__setMode__Mode,
|
||||
"",
|
||||
"");
|
||||
I_Method0(osg::ImageSequence::Mode, getMode,
|
||||
Properties::NON_VIRTUAL,
|
||||
__Mode__getMode,
|
||||
"",
|
||||
"");
|
||||
I_Method1(void, setDuration, IN, double, duration,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__setDuration__double,
|
||||
@@ -99,26 +116,6 @@ BEGIN_OBJECT_REFLECTOR(osg::ImageSequence)
|
||||
__double__getDuration,
|
||||
"",
|
||||
"");
|
||||
I_Method1(void, setPreLoadTime, IN, double, preLoadTime,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__setPreLoadTime__double,
|
||||
"",
|
||||
"");
|
||||
I_Method0(double, getPreLoadTime,
|
||||
Properties::NON_VIRTUAL,
|
||||
__double__getPreLoadTime,
|
||||
"",
|
||||
"");
|
||||
I_Method1(void, setPruneOldImages, IN, bool, prune,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__setPruneOldImages__bool,
|
||||
"",
|
||||
"");
|
||||
I_Method0(bool, getPruneOldImages,
|
||||
Properties::NON_VIRTUAL,
|
||||
__bool__getPruneOldImages,
|
||||
"",
|
||||
"");
|
||||
I_Method1(void, addImageFile, IN, const std::string &, fileName,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__addImageFile__C5_std_string_R1,
|
||||
@@ -175,12 +172,9 @@ BEGIN_OBJECT_REFLECTOR(osg::ImageSequence)
|
||||
I_SimpleProperty(osg::ImageSequence::Images &, Images,
|
||||
__Images_R1__getImages,
|
||||
0);
|
||||
I_SimpleProperty(double, PreLoadTime,
|
||||
__double__getPreLoadTime,
|
||||
__void__setPreLoadTime__double);
|
||||
I_SimpleProperty(bool, PruneOldImages,
|
||||
__bool__getPruneOldImages,
|
||||
__void__setPruneOldImages__bool);
|
||||
I_SimpleProperty(osg::ImageSequence::Mode, Mode,
|
||||
__Mode__getMode,
|
||||
__void__setMode__Mode);
|
||||
I_SimpleProperty(double, ReferenceTime,
|
||||
__double__getReferenceTime,
|
||||
__void__setReferenceTime__double);
|
||||
@@ -239,5 +233,5 @@ END_REFLECTOR
|
||||
|
||||
STD_LIST_REFLECTOR(std::list< osg::ref_ptr< osg::Image > >)
|
||||
|
||||
STD_LIST_REFLECTOR(std::list< std::string >)
|
||||
STD_VECTOR_REFLECTOR(std::vector< std::string >)
|
||||
|
||||
|
||||
@@ -487,5 +487,3 @@ STD_VECTOR_REFLECTOR(std::vector< osg::Matrix >)
|
||||
|
||||
STD_VECTOR_REFLECTOR(std::vector< osg::NodePath >)
|
||||
|
||||
STD_VECTOR_REFLECTOR(std::vector< std::string >)
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <osg/FrameStamp>
|
||||
#include <osg/Geode>
|
||||
#include <osg/Group>
|
||||
#include <osg/Image>
|
||||
#include <osg/LOD>
|
||||
#include <osg/LightSource>
|
||||
#include <osg/MatrixTransform>
|
||||
@@ -416,11 +417,24 @@ BEGIN_ABSTRACT_OBJECT_REFLECTOR(osg::NodeVisitor::ImageRequestHandler)
|
||||
I_Constructor0(____ImageRequestHandler,
|
||||
"",
|
||||
"");
|
||||
I_Method0(double, getPreLoadTime,
|
||||
Properties::PURE_VIRTUAL,
|
||||
__double__getPreLoadTime,
|
||||
"",
|
||||
"");
|
||||
I_Method1(osg::Image *, readImageFile, IN, const std::string &, fileName,
|
||||
Properties::PURE_VIRTUAL,
|
||||
__osg_Image_P1__readImageFile__C5_std_string_R1,
|
||||
"",
|
||||
"");
|
||||
I_Method4(void, requestImageFile, IN, const std::string &, fileName, IN, osg::Object *, attachmentPoint, IN, double, timeToMergeBy, IN, const osg::FrameStamp *, framestamp,
|
||||
Properties::PURE_VIRTUAL,
|
||||
__void__requestImageFile__C5_std_string_R1__osg_Object_P1__double__C5_FrameStamp_P1,
|
||||
"",
|
||||
"");
|
||||
I_SimpleProperty(double, PreLoadTime,
|
||||
__double__getPreLoadTime,
|
||||
0);
|
||||
END_REFLECTOR
|
||||
|
||||
BEGIN_VALUE_REFLECTOR(osg::ref_ptr< osg::Referenced >)
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <osgIntrospection/Attributes>
|
||||
|
||||
#include <osg/FrameStamp>
|
||||
#include <osg/Image>
|
||||
#include <osg/Object>
|
||||
#include <osgDB/ImagePager>
|
||||
|
||||
@@ -28,6 +29,36 @@ BEGIN_OBJECT_REFLECTOR(osgDB::ImagePager)
|
||||
I_Constructor0(____ImagePager,
|
||||
"",
|
||||
"");
|
||||
I_Method1(osgDB::ImagePager::ImageThread *, getImageThread, IN, unsigned int, i,
|
||||
Properties::NON_VIRTUAL,
|
||||
__ImageThread_P1__getImageThread__unsigned_int,
|
||||
"",
|
||||
"");
|
||||
I_Method1(const osgDB::ImagePager::ImageThread *, getImageThread, IN, unsigned int, i,
|
||||
Properties::NON_VIRTUAL,
|
||||
__C5_ImageThread_P1__getImageThread__unsigned_int,
|
||||
"",
|
||||
"");
|
||||
I_Method0(unsigned int, getNumImageThreads,
|
||||
Properties::NON_VIRTUAL,
|
||||
__unsigned_int__getNumImageThreads,
|
||||
"",
|
||||
"");
|
||||
I_Method1(void, setPreLoadTime, IN, double, preLoadTime,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__setPreLoadTime__double,
|
||||
"",
|
||||
"");
|
||||
I_Method0(double, getPreLoadTime,
|
||||
Properties::VIRTUAL,
|
||||
__double__getPreLoadTime,
|
||||
"",
|
||||
"");
|
||||
I_Method1(osg::Image *, readImageFile, IN, const std::string &, fileName,
|
||||
Properties::VIRTUAL,
|
||||
__osg_Image_P1__readImageFile__C5_std_string_R1,
|
||||
"",
|
||||
"");
|
||||
I_Method4(void, requestImageFile, IN, const std::string &, fileName, IN, osg::Object *, attachmentPoint, IN, double, timeToMergeBy, IN, const osg::FrameStamp *, framestamp,
|
||||
Properties::VIRTUAL,
|
||||
__void__requestImageFile__C5_std_string_R1__osg_Object_P1__double__C5_osg_FrameStamp_P1,
|
||||
@@ -48,6 +79,16 @@ BEGIN_OBJECT_REFLECTOR(osgDB::ImagePager)
|
||||
__int__cancel,
|
||||
"",
|
||||
"");
|
||||
I_ArrayProperty(osgDB::ImagePager::ImageThread *, ImageThread,
|
||||
__ImageThread_P1__getImageThread__unsigned_int,
|
||||
0,
|
||||
__unsigned_int__getNumImageThreads,
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
I_SimpleProperty(double, PreLoadTime,
|
||||
__double__getPreLoadTime,
|
||||
__void__setPreLoadTime__double);
|
||||
END_REFLECTOR
|
||||
|
||||
BEGIN_ENUM_REFLECTOR(osgDB::ImagePager::ImageThread::Mode)
|
||||
|
||||
Reference in New Issue
Block a user