void HeartBeat::timerEvent( QTimerEvent */*event*/ ) { osg::ref_ptr< osgViewer::ViewerBase > viewer; if( !_viewer.lock( viewer ) ) { // viewer has been deleted -> stop timer stopTimer(); return; } // limit the frame rate if( viewer->getRunMaxFrameRate() > 0.0) { double dt = _lastFrameStartTime.time_s(); double minFrameTime = 1.0 / viewer->getRunMaxFrameRate(); if (dt < minFrameTime) OpenThreads::Thread::microSleep(static_cast<unsigned int>(1000000.0*(minFrameTime-dt))); } else { // avoid excessive CPU loading when no frame is required in ON_DEMAND mode if( viewer->getRunFrameScheme() == osgViewer::ViewerBase::ON_DEMAND ) { double dt = _lastFrameStartTime.time_s(); if (dt < 0.01) OpenThreads::Thread::microSleep(static_cast<unsigned int>(1000000.0*(0.01-dt))); } // record start frame time _lastFrameStartTime.setStartTick(); // make frame if( viewer->getRunFrameScheme() == osgViewer::ViewerBase::ON_DEMAND ) { if( viewer->checkNeedToDoFrame() ) { viewer->frame(); } } else { viewer->frame(); } } }
void apply(Environment& env, Ocean& ocean) { if (chop.isSet()) { ocean.SetChoppiness(chop.get()); chop.clear(); } if (seaState.isSet()) { env.SimulateSeaState(seaState.get(), 0.0); seaState.clear(); } osg::ref_ptr<TritonLayer> layer; if (alpha.isSet() && tritonLayer.lock(layer)) { layer->setOpacity(alpha.value()); alpha.clear(); } }
void onMapModelChanged( const MapModelChange& change ) { osg::ref_ptr<TerrainEngineNode> safeNode; if (_node.lock(safeNode)) safeNode->onMapModelChanged( change ); }
void onMapInfoEstablished( const MapInfo& mapInfo ) { osg::ref_ptr<TerrainEngineNode> safeNode; if (_node.lock(safeNode)) safeNode->onMapInfoEstablished( mapInfo ); }