Changeset 4470 for OpenSceneGraph/trunk/examples/osgcluster/osgcluster.cpp
- Timestamp:
- 08/29/05 14:05:17 (8 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/examples/osgcluster/osgcluster.cpp
r3809 r4470 34 34 } 35 35 36 class PackedEvent 37 { 38 public: 39 PackedEvent(): 40 _eventType(osgProducer::EventAdapter::NONE), 41 _key(0), 42 _button(0), 43 _Xmin(0),_Xmax(0), 44 _Ymin(0),_Ymax(0), 45 _mx(0), 46 _my(0), 47 _buttonMask(0), 48 _modKeyMask(0), 49 _time(0.0) {} 50 51 52 void set(const osgProducer::EventAdapter& event) 53 { 54 _eventType = event._eventType; 55 _key = event._key; 56 _button = event._button; 57 _Xmin = event._Xmin; 58 _Xmax = event._Xmax; 59 _Ymin = event._Ymin; 60 _Ymax = event._Ymax; 61 _mx = event._mx; 62 _my = event._my; 63 _buttonMask = event._buttonMask; 64 _modKeyMask = event._modKeyMask; 65 _time = event._time; 66 } 67 68 void get(osgProducer::EventAdapter& event) 69 { 70 event._eventType = _eventType; 71 event._key = _key; 72 event._button = _button; 73 event._Xmin = _Xmin; 74 event._Xmax = _Xmax; 75 event._Ymin = _Ymin; 76 event._Ymax = _Ymax; 77 event._mx = _mx; 78 event._my = _my; 79 event._buttonMask = _buttonMask; 80 event._modKeyMask = _modKeyMask; 81 event._time = _time; 82 } 83 84 void swapBytes() 85 { 86 } 87 88 protected: 89 90 osgProducer::EventAdapter::EventType _eventType; 91 int _key; 92 int _button; 93 float _Xmin,_Xmax; 94 float _Ymin,_Ymax; 95 float _mx; 96 float _my; 97 unsigned int _buttonMask; 98 unsigned int _modKeyMask; 99 double _time; 100 }; 101 102 const unsigned int MAX_NUM_EVENTS = 10; 103 36 104 class CameraPacket { 37 105 public: 106 38 107 39 108 CameraPacket():_masterKilled(false) … … 56 125 matrix = _matrix * osg::Matrix::rotate(osg::DegreesToRadians(angle_offset),0.0f,1.0f,0.0f); 57 126 } 127 128 void readEventQueue(osgProducer::Viewer& viewer); 129 130 void writeEventQueue(osgProducer::Viewer& viewer); 58 131 59 132 void checkByteOrder( void ) … … 67 140 68 141 // umm.. we should byte swap _frameStamp too... 142 143 144 for(unsigned int ei=0; ei<_numEvents; ++ei) 145 { 146 _events[ei].swapBytes(); 147 } 69 148 } 70 149 } … … 84 163 osg::FrameStamp _frameStamp; 85 164 165 unsigned int _numEvents; 166 PackedEvent _events[MAX_NUM_EVENTS]; 167 86 168 }; 169 170 void CameraPacket::readEventQueue(osgProducer::Viewer& viewer) 171 { 172 osgProducer::KeyboardMouseCallback::EventQueue queue; 173 viewer.getKeyboardMouseCallback()->copyEventQueue(queue); 174 175 _numEvents = 0; 176 for(osgProducer::KeyboardMouseCallback::EventQueue::iterator itr =queue.begin(); 177 itr != queue.end() && _numEvents<MAX_NUM_EVENTS; 178 ++itr, ++_numEvents) 179 { 180 osgProducer::EventAdapter* event = itr->get(); 181 _events[_numEvents].set(*event); 182 } 183 std::cout<<"written events = "<<_numEvents<<std::endl; 184 } 185 186 void CameraPacket::writeEventQueue(osgProducer::Viewer& viewer) 187 { 188 std::cout<<"recived events = "<<_numEvents<<std::endl; 189 190 // copy the packed events to osgProducer style events. 191 osgProducer::KeyboardMouseCallback::EventQueue queue; 192 for(unsigned int ei=0; ei<_numEvents; ++ei) 193 { 194 osgProducer::EventAdapter* event = new osgProducer::EventAdapter; 195 _events[ei].get(*event); 196 queue.push_back(event); 197 } 198 199 // pass them to the viewer. 200 viewer.getKeyboardMouseCallback()->appendEventQueue(queue); 201 } 202 203 87 204 88 205 enum ViewerMode … … 124 241 while (arguments.read("-s")) viewerMode = SLAVE; 125 242 126 float socketNumber=8100.0f;243 int socketNumber=8100; 127 244 while (arguments.read("-n",socketNumber)) ; 128 245 … … 188 305 189 306 bc.setPort(static_cast<short int>(socketNumber)); 190 rc.setPort(static_cast<short int>(socketNumber ));307 rc.setPort(static_cast<short int>(socketNumber+1)); 191 308 192 309 bool masterKilled = false; … … 197 314 viewer.sync(); 198 315 199 // update the scene by traversing it with the the update visitor which will 200 // call all node update callbacks and animations. 201 viewer.update(); 202 203 316 osg::Timer_t startTick = osg::Timer::instance()->tick(); 317 204 318 // special handling for working as a cluster. 205 319 switch (viewerMode) … … 212 326 213 327 cp->setPacket(modelview,viewer.getFrameStamp()); 328 329 cp->readEventQueue(viewer); 214 330 215 331 bc.setBuffer(cp, sizeof( CameraPacket )); 216 332 217 333 bc.sync(); 218 334 219 335 } 220 336 break; … … 228 344 cp->checkByteOrder(); 229 345 230 osg::Matrix modelview; 231 cp->getModelView(modelview,camera_offset); 232 233 viewer.setView(modelview); 346 cp->writeEventQueue(viewer); 234 347 235 348 if (cp->getMasterKilled()) … … 246 359 } 247 360 361 osg::Timer_t endTick = osg::Timer::instance()->tick(); 362 363 osg::notify(osg::NOTICE)<<"Time to do sync "<<osg::Timer::instance()->delta_m(startTick,endTick)<<std::endl; 364 365 // update the scene by traversing it with the the update visitor which will 366 // call all node update callbacks and animations. 367 viewer.update(); 368 369 if (viewerMode==SLAVE) 370 { 371 osg::Matrix modelview; 372 cp->getModelView(modelview,camera_offset); 373 374 viewer.setView(modelview); 375 } 376 248 377 // fire off the cull and draw traversals of the scene. 249 378 if(!masterKilled)
