Show
Ignore:
Timestamp:
05/26/08 18:25:31 (6 years ago)
Author:
robert
Message:

Introduce --pbuffer-only width height option, and added fps reporting to stats output

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgscreencapture/osgscreencapture.cpp

    r8345 r8346  
    249249    _timeForMemCpy += timeForMemCpy; 
    250250     
    251     _previousFrameTick = tick_afterMemCpy; 
    252      
    253251    ++_numTimeValuesRecorded; 
    254252     
     
    258256        timeForFullCopy = _timeForFullCopy/double(_numTimeValuesRecorded); 
    259257        timeForMemCpy = _timeForMemCpy/double(_numTimeValuesRecorded); 
    260      
     258         
     259        double averageFrameTime =  osg::Timer::instance()->delta_s(_previousFrameTick, tick_afterMemCpy)/double(_numTimeValuesRecorded); 
     260        double fps = 1.0/averageFrameTime;     
     261        _previousFrameTick = tick_afterMemCpy; 
     262 
    261263        _timeForReadPixels = 0.0; 
    262264        _timeForFullCopy = 0.0; 
     
    268270        double numMb = double(dataSize) / (1024*1024); 
    269271 
     272        int prec = osg::notify(osg::NOTICE).precision(5); 
     273 
    270274        if (timeForMemCpy==0.0) 
    271275        { 
    272             osg::notify(osg::NOTICE)<<"Full frame copy = "<<timeForFullCopy*1000.0f<<"ms rate = "<<numMPixels / timeForFullCopy<<" Mpixel/sec, copy speed = "<<numMb / timeForFullCopy<<" Mb/sec"<<std::endl; 
     276            osg::notify(osg::NOTICE)<<"fps = "<<fps<<", full frame copy = "<<timeForFullCopy*1000.0f<<"ms rate = "<<numMPixels / timeForFullCopy<<" Mpixel/sec, copy speed = "<<numMb / timeForFullCopy<<" Mb/sec"<<std::endl; 
    273277        } 
    274278        else 
    275279        { 
    276             osg::notify(osg::NOTICE)<<"Full frame copy = "<<timeForFullCopy*1000.0f<<"ms rate = "<<numMPixels / timeForFullCopy<<" Mpixel/sec, "<<numMb / timeForFullCopy<< " Mb/sec "<< 
     280            osg::notify(osg::NOTICE)<<"fps = "<<fps<<", full frame copy = "<<timeForFullCopy*1000.0f<<"ms rate = "<<numMPixels / timeForFullCopy<<" Mpixel/sec, "<<numMb / timeForFullCopy<< " Mb/sec "<< 
    277281                                      "time for memcpy = "<<timeForMemCpy*1000.0<<"ms  memcpy speed = "<<numMb / timeForMemCpy<<" Mb/sec"<<std::endl; 
    278282        } 
     283        osg::notify(osg::NOTICE).precision(prec); 
    279284 
    280285    } 
     
    689694    unsigned int width=1280; 
    690695    unsigned int height=1024; 
     696    bool pbufferOnly = false; 
    691697    osg::ref_ptr<osg::GraphicsContext> pbuffer; 
    692     if (arguments.read("--pbuffer",width,height)) 
     698    if (arguments.read("--pbuffer",width,height) ||  
     699        (pbufferOnly = arguments.read("--pbuffer-only",width,height))) 
    693700    { 
    694701        osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; 
     
    743750    viewer.setSceneData( loadedModel.get() ); 
    744751 
    745     viewer.realize(); 
    746752     
    747753    if (pbuffer.valid()) 
    748754    { 
    749         viewer.stopThreading(); 
    750          
    751         pbuffer->realize(); 
    752      
    753755        osg::ref_ptr<osg::Camera> camera = new osg::Camera; 
    754756        camera->setGraphicsContext(pbuffer.get()); 
     
    759761        camera->setFinalDrawCallback(new WindowCaptureCallback(mode, position, readBuffer)); 
    760762 
    761         viewer.addSlave(camera.get(), osg::Matrixd(), osg::Matrixd()); 
    762          
    763         viewer.startThreading(); 
     763        if (pbufferOnly) 
     764        { 
     765            viewer.addSlave(camera.get(), osg::Matrixd(), osg::Matrixd()); 
     766 
     767            viewer.realize(); 
     768        } 
     769        else 
     770        { 
     771            viewer.realize(); 
     772 
     773            viewer.stopThreading(); 
     774 
     775            pbuffer->realize(); 
     776 
     777            viewer.addSlave(camera.get(), osg::Matrixd(), osg::Matrixd()); 
     778 
     779            viewer.startThreading(); 
     780        } 
    764781    } 
    765782    else 
    766783    { 
     784        viewer.realize(); 
     785 
    767786        addCallbackToViewer(viewer, new WindowCaptureCallback(mode, position, readBuffer)); 
    768787    }