From 400e6eb09a6bfe4f432c498b1ea20cc392cdd721 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 6 Oct 2008 17:02:56 +0000 Subject: [PATCH] Updated to reflect changes in NodeVistor::ImageRequestHandler. --- include/osgDB/ImagePager | 8 +++++--- src/osgDB/ImagePager.cpp | 38 +++++++++++++++++++++++--------------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/include/osgDB/ImagePager b/include/osgDB/ImagePager index 943031ee4..50f3d6aae 100644 --- a/include/osgDB/ImagePager +++ b/include/osgDB/ImagePager @@ -78,7 +78,7 @@ class OSGDB_EXPORT ImagePager : public osg::NodeVisitor::ImageRequestHandler virtual osg::Image* readImageFile(const std::string& fileName); - virtual void requestImageFile(const std::string& fileName,osg::Object* attachmentPoint, double timeToMergeBy, const osg::FrameStamp* framestamp); + virtual void requestImageFile(const std::string& fileName,osg::Object* attachmentPoint, int attachmentIndex, double timeToMergeBy, const osg::FrameStamp* framestamp); /** Return true if there are pending updates to the scene graph that require a call to updateSceneGraph(double). */ @@ -102,12 +102,14 @@ class OSGDB_EXPORT ImagePager : public osg::NodeVisitor::ImageRequestHandler { ImageRequest(): osg::Referenced(true), - _timeToMergeBy(0.0) {} + _timeToMergeBy(0.0), + _attachmentIndex(-1) {} double _timeToMergeBy; std::string _fileName; osg::ref_ptr _loadOptions; - osg::observer_ptr _objectToAttachTo; + osg::observer_ptr _attachmentPoint; + int _attachmentIndex; osg::ref_ptr _loadedImage; RequestQueue* _requestQueue; diff --git a/src/osgDB/ImagePager.cpp b/src/osgDB/ImagePager.cpp index ff00f9639..802359fc3 100644 --- a/src/osgDB/ImagePager.cpp +++ b/src/osgDB/ImagePager.cpp @@ -62,7 +62,7 @@ void ImagePager::ReadQueue::clear() citr != _requestList.end(); ++citr) { - (*citr)->_objectToAttachTo = 0; + (*citr)->_attachmentPoint = 0; (*citr)->_requestQueue = 0; } @@ -162,7 +162,7 @@ int ImagePager::ImageThread::cancel() void ImagePager::ImageThread::run() { - osg::notify(osg::NOTICE)<<"ImagePager::ImageThread::run()"< read_queue; @@ -192,10 +192,17 @@ void ImagePager::ImageThread::run() osg::ref_ptr image = osgDB::readImageFile(imageRequest->_fileName); if (image.valid()) { - osg::ImageSequence* is = dynamic_cast(imageRequest->_objectToAttachTo.get()); + osg::ImageSequence* is = dynamic_cast(imageRequest->_attachmentPoint.get()); if (is) { - is->addImage(image.get()); + if (imageRequest->_attachmentIndex >= 0) + { + is->setImage(imageRequest->_attachmentIndex, image.get()); + } + else + { + is->addImage(image.get()); + } } else { @@ -225,7 +232,7 @@ void ImagePager::ImageThread::run() } while (!testCancel() && !_done); - osg::notify(osg::NOTICE)<<"ImagePager::ImageThread::done()"< request = new ImageRequest; request->_timeToMergeBy = timeToMergeBy; request->_fileName = fileName; - request->_objectToAttachTo = attachmentPoint; + request->_attachmentPoint = attachmentPoint; + request->_attachmentIndex = attachmentIndex; request->_requestQueue = _readQueue.get(); _readQueue->add(request.get()); @@ -335,10 +342,11 @@ void ImagePager::updateSceneGraph(const osg::FrameStamp &frameStamp) ++itr) { ImageRequest* imageRequest = itr->get(); - osg::Texture* texture = dynamic_cast(imageRequest->_objectToAttachTo.get()); + osg::Texture* texture = dynamic_cast(imageRequest->_attachmentPoint.get()); if (texture) { - texture->setImage(0, imageRequest->_loadedImage.get()); + int attachmentIndex = imageRequest->_attachmentIndex > 0 ? imageRequest->_attachmentIndex : 0; + texture->setImage(attachmentIndex, imageRequest->_loadedImage.get()); } else {