Show
Ignore:
Timestamp:
05/25/08 23:52:32 (7 years ago)
Author:
robert
Message:

Added option for setting whether the front or back buffer should be read using
--front and --back command line options.

Files:
1 modified

Legend:

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

    r8338 r8339  
    5353        { 
    5454         
    55             ContextData(osg::GraphicsContext* gc, Mode mode, FramePosition position, const std::string& name): 
     55            ContextData(osg::GraphicsContext* gc, Mode mode, GLenum readBuffer, const std::string& name): 
    5656                _gc(gc), 
    5757                _mode(mode), 
    58                 _position(position), 
     58                _readBuffer(readBuffer), 
    5959                _fileName(name), 
    6060                _pixelFormat(GL_BGR), 
     
    7575                switch(_mode) 
    7676                { 
    77                     case(READ_PIXELS):  
     77                    case(READ_PIXELS): 
    7878                        osg::notify(osg::NOTICE)<<"Reading window usig glReadPixels, with out PixelBufferObject."<<std::endl; 
    7979                        break; 
     
    133133            osg::GraphicsContext*   _gc; 
    134134            Mode                    _mode; 
    135             FramePosition           _position; 
     135            GLenum                  _readBuffer; 
    136136            std::string             _fileName; 
    137137             
     
    148148        }; 
    149149     
    150         WindowCaptureCallback(Mode mode, FramePosition position): 
     150        WindowCaptureCallback(Mode mode, FramePosition position, GLenum readBuffer): 
    151151            _mode(mode), 
    152             _position(position) 
     152            _position(position), 
     153            _readBuffer(readBuffer) 
    153154        { 
    154155        } 
     
    160161            std::stringstream filename; 
    161162            filename << "test_"<<_contextDataMap.size()<<".jpg"; 
    162             return new ContextData(gc, _mode, _position, filename.str()); 
     163            return new ContextData(gc, _mode, _readBuffer, filename.str()); 
    163164        } 
    164165         
     
    174175        virtual void operator () (osg::RenderInfo& renderInfo) const 
    175176        { 
    176             if (_position==START_FRAME) 
    177             { 
    178                 glReadBuffer(GL_FRONT); 
    179             } 
    180             else 
    181             { 
    182                 glReadBuffer(GL_BACK); 
    183             } 
     177            glReadBuffer(_readBuffer); 
    184178 
    185179            osg::GraphicsContext* gc = renderInfo.getState()->getGraphicsContext(); 
     
    192186        Mode                        _mode;         
    193187        FramePosition               _position; 
     188        GLenum                      _readBuffer; 
    194189        mutable OpenThreads::Mutex  _mutex; 
    195190        mutable ContextDataMap      _contextDataMap; 
     
    567562    viewer.addEventHandler(new osgViewer::LODScaleHandler); 
    568563 
     564    GLenum readBuffer = GL_BACK; 
    569565    WindowCaptureCallback::FramePosition position = WindowCaptureCallback::END_FRAME; 
    570     while (arguments.read("--start-frame")) position = WindowCaptureCallback::START_FRAME; 
     566    WindowCaptureCallback::Mode mode = WindowCaptureCallback::DOUBLE_PBO; 
     567 
     568    while (arguments.read("--start-frame")) { position = WindowCaptureCallback::START_FRAME; readBuffer = GL_FRONT; } 
    571569    while (arguments.read("--end-frame")) position = WindowCaptureCallback::END_FRAME; 
    572570 
    573     WindowCaptureCallback::Mode mode = WindowCaptureCallback::DOUBLE_PBO; 
     571    while (arguments.read("--front")) readBuffer = GL_FRONT; 
     572    while (arguments.read("--back")) readBuffer = GL_BACK; 
     573 
    574574    while (arguments.read("--no-pbo")) mode = WindowCaptureCallback::READ_PIXELS; 
    575575    while (arguments.read("--single-pbo")) mode = WindowCaptureCallback::SINGLE_PBO; 
    576576    while (arguments.read("--double-pbo")) mode = WindowCaptureCallback::DOUBLE_PBO; 
     577 
     578     
    577579         
    578580    // load the data 
     
    603605    viewer.realize(); 
    604606     
    605     addCallbackToViewer(viewer, new WindowCaptureCallback(mode, position)); 
     607    addCallbackToViewer(viewer, new WindowCaptureCallback(mode, position, readBuffer)); 
    606608 
    607609    return viewer.run();