Changeset 7140
- Timestamp:
- 07/19/07 17:24:11
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
OpenSceneGraph/trunk/examples/osgterrain/osgterrain.cpp
r7138 r7140 17 17 */ 18 18 19 #include <OpenThreads/Block> 20 19 21 #include <osg/Group> 20 22 #include <osg/Geode> … … 27 29 #include <osg/ArgumentParser> 28 30 31 29 32 #include <osgDB/FileUtils> 30 33 #include <osgDB/ReadFile> … … 54 57 typedef std::vector< osg::ref_ptr<osg::GraphicsThread> > GraphicsThreads; 55 58 56 class CountedBlock : public osg::Referenced 57 { 58 public: 59 60 CountedBlock(unsigned int blockCount); 61 62 void completed(); 63 64 void block(); 65 66 void reset(); 67 68 void release(); 69 70 void setBlockCount(unsigned int blockCount); 71 72 protected: 73 74 ~CountedBlock(); 75 76 OpenThreads::Mutex _mut; 77 OpenThreads::Condition _cond; 78 unsigned int _numberOfBlocks; 79 unsigned int _blockCount; 80 }; 81 82 CountedBlock::CountedBlock(unsigned int numberOfBlocks): 83 _numberOfBlocks(numberOfBlocks), 84 _blockCount(0) 85 { 86 } 87 88 void CountedBlock::completed() 89 { 90 OpenThreads::ScopedLock<OpenThreads::Mutex> mutlock(_mut); 91 if (_blockCount>0) 92 { 93 --_blockCount; 94 95 if (_blockCount==0) 96 { 97 // osg::notify(osg::NOTICE)<<"Released"<<std::endl; 98 _cond.broadcast(); 99 } 100 } 101 } 102 103 void CountedBlock::block() 104 { 105 OpenThreads::ScopedLock<OpenThreads::Mutex> mutlock(_mut); 106 if (_blockCount) 107 _cond.wait(&_mut); 108 } 109 110 void CountedBlock::release() 111 { 112 OpenThreads::ScopedLock<OpenThreads::Mutex> mutlock(_mut); 113 if (_blockCount) 114 { 115 _blockCount = 0; 116 _cond.broadcast(); 117 } 118 } 119 120 void CountedBlock::reset() 121 { 122 OpenThreads::ScopedLock<OpenThreads::Mutex> mutlock(_mut); 123 if (_numberOfBlocks!=_blockCount) 124 { 125 if (_numberOfBlocks==0) _cond.broadcast(); 126 _blockCount = _numberOfBlocks; 127 } 128 } 129 130 void CountedBlock::setBlockCount(unsigned int blockCount) 131 { 132 _numberOfBlocks = blockCount; 133 } 134 135 CountedBlock::~CountedBlock() 136 { 137 _blockCount = 0; 138 release(); 139 } 59 140 60 141 61 class LoadAndCompileOperation : public osg::Operation … … 143 63 public: 144 64 145 LoadAndCompileOperation(const std::string& filename, GraphicsThreads& graphicsThreads, CountedBlock* block):65 LoadAndCompileOperation(const std::string& filename, GraphicsThreads& graphicsThreads, osg::RefBlockCount* block): 146 66 Operation("Load and compile Operation", false), 147 67 _filename(filename), … … 175 95 GraphicsThreads _graphicsThreads; 176 96 osg::ref_ptr<osg::Node> _loadedModel; 177 osg::ref_ptr< CountedBlock>_block;97 osg::ref_ptr<osg::RefBlockCount> _block; 178 98 179 99 }; … … 309 229 // osg::notify(osg::NOTICE)<<"Using OperationQueue"<<std::endl; 310 230 311 _endOfLoadBlock = new CountedBlock(newFiles.size());231 _endOfLoadBlock = new osg::RefBlockCount(newFiles.size()); 312 232 313 233 typedef std::list< osg::ref_ptr<LoadAndCompileOperation> > LoadAndCompileList; … … 494 414 495 415 osg::ref_ptr<osg::BarrierOperation> _endOfCompilebarrier; 496 osg::ref_ptr< CountedBlock>_endOfLoadBlock;416 osg::ref_ptr<osg::RefBlockCount> _endOfLoadBlock; 497 417 498 418 osg::ref_ptr<osg::OperationQueue> _operationQueue; OpenSceneGraph/trunk/include/osg/OperationThread
r7118 r7140 28 28 namespace osg { 29 29 30 class RefBlock : virtual public osg::Referenced, public OpenThreads::Block30 class RefBlock : virtual public osg::Referenced, public OpenThreads::Block 31 31 { 32 32 public: … … 34 34 RefBlock(): 35 35 osg::Referenced(true) {} 36 37 }; 38 39 class RefBlockCount : virtual public osg::Referenced, public OpenThreads::BlockCount 40 { 41 public: 42 43 RefBlockCount(unsigned blockCount): 44 osg::Referenced(true), 45 OpenThreads::BlockCount(blockCount) {} 36 46 37 47 };
