OpenSceneGraph 3.6.5
ImagePager
Go to the documentation of this file.
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version. The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * OpenSceneGraph Public License for more details.
12*/
13
14#ifndef OSGDB_IMAGEPAGER
15#define OSGDB_IMAGEPAGER 1
16
17#include <osg/Image>
18#include <osg/NodeVisitor>
19#include <osg/observer_ptr>
20#include <osg/OperationThread>
21#include <osg/FrameStamp>
22
23#include <OpenThreads/Mutex>
24#include <OpenThreads/Atomic>
25
26#include <osgDB/ReaderWriter>
27#include <osgDB/Options>
28
29namespace osgDB
30{
31
33{
34 public:
35
37
38 class OSGDB_EXPORT ImageThread : public osg::Referenced, public OpenThreads::Thread
39 {
40 public:
41
48
49 ImageThread(ImagePager* pager, Mode mode, const std::string& name);
50
52
53 void setDone(bool done) { _done = done; }
54 bool getDone() const { return _done; }
55
56 virtual int cancel();
57
58 virtual void run();
59
60 protected:
61
62 virtual ~ImageThread();
63
64 bool _done;
67 std::string _name;
68 };
69
70
71 ImageThread* getImageThread(unsigned int i) { return _imageThreads[i].get(); }
72
73 const ImageThread* getImageThread(unsigned int i) const { return _imageThreads[i].get(); }
74
75 unsigned int getNumImageThreads() const { return static_cast<unsigned int>(_imageThreads.size()); }
76
77
78 void setPreLoadTime(double preLoadTime) { _preLoadTime=preLoadTime; }
79 virtual double getPreLoadTime() const { return _preLoadTime; }
80
81 virtual osg::ref_ptr<osg::Image> readRefImageFile(const std::string& fileName, const osg::Referenced* options=0);
82
83 virtual void requestImageFile(const std::string& fileName, osg::Object* attachmentPoint, int attachmentIndex, double timeToMergeBy, const osg::FrameStamp* framestamp, osg::ref_ptr<osg::Referenced>& imageRequest, const osg::Referenced* options);
84
86 virtual bool requiresUpdateSceneGraph() const;
87
89 virtual void updateSceneGraph(const osg::FrameStamp &frameStamp);
90
93 virtual void signalBeginFrame(const osg::FrameStamp* framestamp);
94
97 virtual void signalEndFrame();
98
99 int cancel();
100
101 protected:
102
103 virtual ~ImagePager();
104 // forward declare
105 struct RequestQueue;
106
109
130
132 {
133 typedef std::vector< osg::ref_ptr<ImageRequest> > RequestList;
134
135 void sort();
136
137 unsigned int size() const;
138
140 mutable OpenThreads::Mutex _requestMutex;
141 };
142
143
144 struct ReadQueue : public RequestQueue
145 {
146 ReadQueue(ImagePager* pager, const std::string& name);
147
148 void block() { _block->block(); }
149
150 void release() { _block->release(); }
151
153 {
154 _block->set((!_requestList.empty() && !_pager->_databasePagerThreadPaused));
155 }
156
157 void clear();
158
159 void add(ImageRequest* imageRequest);
160
161 void takeFirst(osg::ref_ptr<ImageRequest>& databaseRequest);
162
164
166 std::string _name;
167 };
168
169 OpenThreads::Mutex _run_mutex;
171
172 bool _done;
174
175 OpenThreads::Atomic _frameNumber;
176
177 OpenThreads::Mutex _ir_mutex;
179
180 typedef std::vector< osg::ref_ptr<ImageThread> > ImageThreads;
182
184
186};
187
188
189}
190
191#endif
192
The core osg library provides the basic scene graph classes such as Nodes, State and Drawables,...
Definition AlphaFunc:19
The osgDB library provides support for reading and writing scene graphs, providing a plugin framework...
Definition Archive:24
Class which encapsulates the frame number, reference time and calendar time of specific frame,...
Definition FrameStamp:35
Callback for managing image paging, such as generated by PagedLOD nodes.
Definition NodeVisitor:388
Base class/standard interface for objects which require IO support, cloning and reference counting.
Definition Object:61
Smart pointer for observed objects, that automatically set pointers to them to null when they are del...
Definition observer_ptr:39
Smart pointer for handling referenced counted objects.
Definition ref_ptr:32
Base class for providing reference counted objects.
Definition Referenced:44
virtual double getPreLoadTime() const
Definition ImagePager:79
const ImageThread * getImageThread(unsigned int i) const
Definition ImagePager:73
bool _done
Definition ImagePager:172
void setPreLoadTime(double preLoadTime)
Definition ImagePager:78
virtual bool requiresUpdateSceneGraph() const
Return true if there are pending updates to the scene graph that require a call to updateSceneGraph(d...
virtual ~ImagePager()
friend struct SortFileRequestFunctor
Definition ImagePager:108
virtual void signalEndFrame()
Signal the image thread that the update, cull and draw dispatch has completed.
osg::ref_ptr< RequestQueue > _completedQueue
Definition ImagePager:183
bool _databasePagerThreadPaused
Definition ImagePager:173
double _preLoadTime
Definition ImagePager:185
virtual osg::ref_ptr< osg::Image > readRefImageFile(const std::string &fileName, const osg::Referenced *options=0)
bool _startThreadCalled
Definition ImagePager:170
OpenThreads::Mutex _ir_mutex
Definition ImagePager:177
ImageThreads _imageThreads
Definition ImagePager:181
ImageThread * getImageThread(unsigned int i)
Definition ImagePager:71
unsigned int getNumImageThreads() const
Definition ImagePager:75
virtual void signalBeginFrame(const osg::FrameStamp *framestamp)
Signal the image thread that the update, cull and draw has begun for a new frame.
std::vector< osg::ref_ptr< ImageThread > > ImageThreads
Definition ImagePager:180
virtual void updateSceneGraph(const osg::FrameStamp &frameStamp)
Merge the changes to the scene graph.
OpenThreads::Atomic _frameNumber
Definition ImagePager:175
OpenThreads::Mutex _run_mutex
Definition ImagePager:169
osg::ref_ptr< ReadQueue > _readQueue
Definition ImagePager:178
virtual void requestImageFile(const std::string &fileName, osg::Object *attachmentPoint, int attachmentIndex, double timeToMergeBy, const osg::FrameStamp *framestamp, osg::ref_ptr< osg::Referenced > &imageRequest, const osg::Referenced *options)
Definition ImagePager:39
ImageThread(const ImageThread &dt, ImagePager *pager)
bool _done
Definition ImagePager:64
Mode _mode
Definition ImagePager:65
bool getDone() const
Definition ImagePager:54
ImagePager * _pager
Definition ImagePager:66
ImageThread(ImagePager *pager, Mode mode, const std::string &name)
void setDone(bool done)
Definition ImagePager:53
Mode
Definition ImagePager:43
@ HANDLE_NON_HTTP
Definition ImagePager:45
@ HANDLE_ALL_REQUESTS
Definition ImagePager:44
@ HANDLE_ONLY_HTTP
Definition ImagePager:46
std::string _name
Definition ImagePager:67
Definition ImagePager:111
double _timeToMergeBy
Definition ImagePager:120
osg::observer_ptr< osg::Object > _attachmentPoint
Definition ImagePager:123
osg::ref_ptr< osgDB::Options > _readOptions
Definition ImagePager:127
unsigned int _frameNumber
Definition ImagePager:119
osg::ref_ptr< Options > _loadOptions
Definition ImagePager:122
int _attachmentIndex
Definition ImagePager:124
RequestQueue * _requestQueue
Definition ImagePager:126
ImageRequest()
Definition ImagePager:112
osg::ref_ptr< osg::Image > _loadedImage
Definition ImagePager:125
std::string _fileName
Definition ImagePager:121
Definition ImagePager:132
std::vector< osg::ref_ptr< ImageRequest > > RequestList
Definition ImagePager:133
unsigned int size() const
OpenThreads::Mutex _requestMutex
Definition ImagePager:140
RequestList _requestList
Definition ImagePager:139
ImagePager * _pager
Definition ImagePager:165
std::string _name
Definition ImagePager:166
void add(ImageRequest *imageRequest)
osg::ref_ptr< osg::RefBlock > _block
Definition ImagePager:163
void updateBlock()
Definition ImagePager:152
ReadQueue(ImagePager *pager, const std::string &name)
void takeFirst(osg::ref_ptr< ImageRequest > &databaseRequest)
void block()
Definition ImagePager:148
void release()
Definition ImagePager:150
#define OSGDB_EXPORT
Definition Export:39

osg logo
Generated at Sun Jul 27 2025 00:00:00 for the OpenSceneGraph by doxygen 1.14.0.