Changeset 7140

Show
Ignore:
Timestamp:
07/19/07 17:24:11
Author:
robert
Message:

Added osg::RefBlockCount? subclassed from the new OpenThreads?::BlockCount? and used it into osgterrain example

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • OpenSceneGraph/trunk/examples/osgterrain/osgterrain.cpp

    r7138 r7140  
    1717*/ 
    1818 
     19#include <OpenThreads/Block> 
     20 
    1921#include <osg/Group> 
    2022#include <osg/Geode> 
     
    2729#include <osg/ArgumentParser> 
    2830 
     31 
    2932#include <osgDB/FileUtils> 
    3033#include <osgDB/ReadFile> 
     
    5457typedef std::vector< osg::ref_ptr<osg::GraphicsThread> > GraphicsThreads; 
    5558 
    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 
    14060 
    14161class LoadAndCompileOperation : public osg::Operation 
     
    14363public: 
    14464 
    145     LoadAndCompileOperation(const std::string& filename, GraphicsThreads& graphicsThreads, CountedBlock* block): 
     65    LoadAndCompileOperation(const std::string& filename, GraphicsThreads& graphicsThreads, osg::RefBlockCount* block): 
    14666        Operation("Load and compile Operation", false), 
    14767        _filename(filename), 
     
    17595    GraphicsThreads             _graphicsThreads; 
    17696    osg::ref_ptr<osg::Node>     _loadedModel; 
    177     osg::ref_ptr<CountedBlock> _block; 
     97    osg::ref_ptr<osg::RefBlockCount> _block; 
    17898 
    17999}; 
     
    309229                // osg::notify(osg::NOTICE)<<"Using OperationQueue"<<std::endl; 
    310230 
    311                 _endOfLoadBlock = new CountedBlock(newFiles.size()); 
     231                _endOfLoadBlock = new osg::RefBlockCount(newFiles.size()); 
    312232      
    313233                typedef std::list< osg::ref_ptr<LoadAndCompileOperation> > LoadAndCompileList; 
     
    494414 
    495415    osg::ref_ptr<osg::BarrierOperation> _endOfCompilebarrier; 
    496     osg::ref_ptr<CountedBlock>          _endOfLoadBlock; 
     416    osg::ref_ptr<osg::RefBlockCount>    _endOfLoadBlock; 
    497417     
    498418    osg::ref_ptr<osg::OperationQueue>   _operationQueue; 
  • OpenSceneGraph/trunk/include/osg/OperationThread

    r7118 r7140  
    2828namespace osg { 
    2929 
    30 class RefBlock: virtual public osg::Referenced, public OpenThreads::Block 
     30class RefBlock : virtual public osg::Referenced, public OpenThreads::Block 
    3131{ 
    3232    public: 
     
    3434        RefBlock(): 
    3535            osg::Referenced(true) {} 
     36 
     37}; 
     38 
     39class RefBlockCount : virtual public osg::Referenced, public OpenThreads::BlockCount 
     40{ 
     41    public: 
     42 
     43        RefBlockCount(unsigned blockCount): 
     44            osg::Referenced(true), 
     45            OpenThreads::BlockCount(blockCount) {} 
    3646 
    3747};