From d17a255d8e2fccd0502e21b0651d0d87a2ea1e60 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 21 Jul 2008 09:46:53 +0000 Subject: [PATCH] First cut of osg::ImageSequence class --- include/osg/ImageSequence | 79 +++++++++++++++++++++++++++++++++++++++ include/osg/ImageStream | 3 +- src/osg/CMakeLists.txt | 2 + src/osg/ImageSequence.cpp | 49 ++++++++++++++++++++++++ 4 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 include/osg/ImageSequence create mode 100644 src/osg/ImageSequence.cpp diff --git a/include/osg/ImageSequence b/include/osg/ImageSequence new file mode 100644 index 000000000..962db5655 --- /dev/null +++ b/include/osg/ImageSequence @@ -0,0 +1,79 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield + * + * This library is open source and may be redistributed and/or modified under + * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or + * (at your option) any later version. The full license is in LICENSE file + * included with this distribution, and on the openscenegraph.org website. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * OpenSceneGraph Public License for more details. +*/ + +#ifndef OSG_IMAGESEQUENCE +#define OSG_IMAGESEQUENCE 1 + +#include +#include + +#include + +namespace osg { + +/** + * Image Buffer class. +*/ +class OSG_EXPORT ImageSequence : public ImageStream +{ + public: + ImageSequence(); + + /** Copy constructor using CopyOp to manage deep vs shallow copy. */ + ImageSequence(const ImageSequence& ImageSequence,const CopyOp& copyop=CopyOp::SHALLOW_COPY); + + virtual Object* cloneType() const { return new ImageSequence(); } + virtual Object* clone(const CopyOp& copyop) const { return new ImageSequence(*this,copyop); } + virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast(obj)!=0; } + virtual const char* libraryName() const { return "osg"; } + virtual const char* className() const { return "ImageSequence"; } + + /** Return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs. */ + virtual int compare(const Image& rhs) const; + + virtual void setReferenceTime(double t) { _referenceTime = t; } + virtual double getReferenceTime() const { return _referenceTime; } + + virtual void setTimeMultiplier(double tm) { _timeMultiplier = tm; } + virtual double getTimeMultiplier() const { return _timeMultiplier; } + + + typedef std::map FileNameSequence; + + typedef std::pair > TimeImagePair; + typedef std::vector TimeImageSequence; + + void addImageFile(double time, std::string& fileName); + + void addImage(double time, osg::Image* image); + + virtual void update(osg::FrameStamp* fs); + + protected: + + virtual ~ImageSequence() {} + + double _referenceTime; + double _timeMultiplier; + + + OpenThreads::Mutex _mutex; + FileNameSequence _timeFileNameSequence; + TimeImageSequence _timeImageSequence; + + +}; + +} // namespace + +#endif diff --git a/include/osg/ImageStream b/include/osg/ImageStream index 90591fdf0..a47e2b0db 100644 --- a/include/osg/ImageStream +++ b/include/osg/ImageStream @@ -15,6 +15,7 @@ #define OSG_IMAGESTREAM 1 #include +#include namespace osg { @@ -78,7 +79,7 @@ class OSG_EXPORT ImageStream : public Image virtual void setVolume(float) {} virtual float getVolume() const { return 0.0f; } - virtual void update() {} + virtual void update(osg::FrameStamp* fs) {} protected: virtual void applyLoopingMode() {} diff --git a/src/osg/CMakeLists.txt b/src/osg/CMakeLists.txt index 828af1c8c..abbd9b702 100644 --- a/src/osg/CMakeLists.txt +++ b/src/osg/CMakeLists.txt @@ -70,6 +70,7 @@ SET(LIB_PUBLIC_HEADERS ${HEADER_PATH}/Group ${HEADER_PATH}/Hint ${HEADER_PATH}/Image + ${HEADER_PATH}/ImageSequence ${HEADER_PATH}/ImageStream ${HEADER_PATH}/io_utils ${HEADER_PATH}/KdTree @@ -228,6 +229,7 @@ ADD_LIBRARY(${LIB_NAME} Group.cpp Hint.cpp Image.cpp + ImageSequence.cpp ImageStream.cpp KdTree.cpp LOD.cpp diff --git a/src/osg/ImageSequence.cpp b/src/osg/ImageSequence.cpp new file mode 100644 index 000000000..50dc03aad --- /dev/null +++ b/src/osg/ImageSequence.cpp @@ -0,0 +1,49 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield + * + * This library is open source and may be redistributed and/or modified under + * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or + * (at your option) any later version. The full license is in LICENSE file + * included with this distribution, and on the openscenegraph.org website. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * OpenSceneGraph Public License for more details. +*/ + +#include + +using namespace osg; + +ImageSequence::ImageSequence() +{ + _referenceTime = 0.0; + _timeMultiplier = 1.0; +} + +ImageSequence::ImageSequence(const ImageSequence& is,const CopyOp& copyop): + osg::ImageStream(is,copyop), + _referenceTime(is._referenceTime), + _timeMultiplier(is._timeMultiplier) +{ +} + +int ImageSequence::compare(const Image& rhs) const +{ + return ImageStream::compare(rhs); +} + +void ImageSequence::addImageFile(double time, std::string& fileName) +{ + _timeFileNameSequence[time] = fileName; +} + +void ImageSequence::addImage(double time, osg::Image* image) +{ + _timeImageSequence.push_back(TimeImagePair(time,image)); +} + +void ImageSequence::update(osg::FrameStamp* fs) +{ + +}