1
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2009 Robert Osfield
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.
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.
14
#include <osgVolume/Volume>
15
#include <OpenThreads/ScopedLock>
17
using namespace osgVolume;
23
Volume::Volume(const Volume& ts, const osg::CopyOp& copyop):
31
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex);
33
for(VolumeTileSet::iterator itr = _volumeTileSet.begin();
34
itr != _volumeTileSet.end();
37
const_cast<VolumeTile*>(*itr)->_volume = 0;
40
_volumeTileSet.clear();
41
_volumeTileMap.clear();
44
void Volume::traverse(osg::NodeVisitor& nv)
49
VolumeTile* Volume::getVolumeTile(const TileID& tileID)
51
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex);
53
VolumeTileMap::iterator itr = _volumeTileMap.find(tileID);
54
if (itr != _volumeTileMap.end()) return 0;
59
const VolumeTile* Volume::getVolumeTile(const TileID& tileID) const
61
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex);
63
VolumeTileMap::const_iterator itr = _volumeTileMap.find(tileID);
64
if (itr != _volumeTileMap.end()) return 0;
69
void Volume::dirtyRegisteredVolumeTiles()
71
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex);
73
for(VolumeTileSet::iterator itr = _volumeTileSet.begin();
74
itr != _volumeTileSet.end();
77
(const_cast<VolumeTile*>(*itr))->setDirty(true);
81
static unsigned int s_maxNumVolumeTiles = 0;
82
void Volume::registerVolumeTile(VolumeTile* volumeTile)
84
if (!volumeTile) return;
86
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex);
88
if (volumeTile->getTileID().valid())
90
_volumeTileMap[volumeTile->getTileID()] = volumeTile;
93
_volumeTileSet.insert(volumeTile);
95
if (_volumeTileSet.size() > s_maxNumVolumeTiles) s_maxNumVolumeTiles = _volumeTileSet.size();
97
// osg::notify(osg::NOTICE)<<"Volume::registerVolumeTile "<<volumeTile<<" total number of VolumeTile "<<_volumeTileSet.size()<<" max = "<<s_maxNumVolumeTiles<<std::endl;
100
void Volume::unregisterVolumeTile(VolumeTile* volumeTile)
102
if (!volumeTile) return;
104
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex);
106
if (volumeTile->getTileID().valid())
108
_volumeTileMap.erase(volumeTile->getTileID());
111
_volumeTileSet.erase(volumeTile);
113
// osg::notify(osg::NOTICE)<<"Volume::unregisterVolumeTile "<<volumeTile<<" total number of VolumeTile "<<_volumeTileSet.size()<<" max = "<<s_maxNumVolumeTiles<<std::endl;