Changeset 6051

Show
Ignore:
Timestamp:
01/25/07 13:02:51 (7 years ago)
Author:
robert
Message:

Added osg::FrameStamp::set/getSimulationTime().

Added setting of osg_SimulationTime and osg_DeltaSimulationTime to the uniforms set by SceneView?

Added frame(double simulationTime) and advance(double simulationTime) parameters to
osgViewer::SimpleViewer?, Vewer and CompositeViewer?.

Updated various examples and Nodes to use SimulationTime? where appropriate.

Location:
OpenSceneGraph/trunk
Files:
48 modified

Legend:

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

    r5910 r6051  
    234234    viewer.setSceneData(rootnode); 
    235235 
    236     return viewer.run(); 
    237 } 
     236    viewer.setCameraManipulator(new osgGA::TrackballManipulator()); 
     237 
     238    viewer.realize(); 
     239 
     240    double simulationTime = 100.0; 
     241     
     242    while (!viewer.done()) 
     243    { 
     244        viewer.frame(simulationTime); 
     245        simulationTime -= 0.01; 
     246    } 
     247} 
  • OpenSceneGraph/trunk/examples/osgcluster/osgcluster.cpp

    r5962 r6051  
    237237            writeUInt(fs.getFrameNumber()); 
    238238            writeDouble(fs.getReferenceTime()); 
     239            writeDouble(fs.getSimulationTime()); 
    239240        } 
    240241 
     
    243244            fs.setFrameNumber(readUInt()); 
    244245            fs.setReferenceTime(readDouble()); 
     246            fs.setSimulationTime(readDouble()); 
    245247 
    246248            osg::notify(osg::NOTICE)<<"readFramestamp = "<<fs.getFrameNumber()<<" "<<fs.getReferenceTime()<<std::endl; 
  • OpenSceneGraph/trunk/examples/osgdepthshadow/osgdepthshadow.cpp

    r5927 r6051  
    6363      if (!fs) return; // not frame stamp, no handle on the time so can't move. 
    6464         
    65       double new_time = fs->getReferenceTime(); 
     65      double new_time = fs->getSimulationTime(); 
    6666      if (nv->getTraversalNumber() != _previous_traversal_number) 
    6767        { 
  • OpenSceneGraph/trunk/examples/osgfxbrowser/osgfxbrowser.cpp

    r5923 r6051  
    3535        osg::MatrixTransform *xform = dynamic_cast<osg::MatrixTransform *>(node); 
    3636        if (xform && enabled_) { 
    37             double t = nv->getFrameStamp()->getReferenceTime(); 
     37            double t = nv->getFrameStamp()->getSimulationTime(); 
    3838            xform->setMatrix(osg::Matrix::rotate(t, osg::Vec3(0, 0, 1))); 
    3939        } 
  • OpenSceneGraph/trunk/examples/osggeometry/osggeometry.cpp

    r5928 r6051  
    525525            if (nv && transform && nv->getFrameStamp()) 
    526526            { 
    527                 double time = nv->getFrameStamp()->getReferenceTime(); 
     527                double time = nv->getFrameStamp()->getSimulationTime(); 
    528528                transform->setMatrix(osg::Matrix::translate(0.0f,1.0f+cosf(time*_angular_velocity),0.0f)); 
    529529            } 
  • OpenSceneGraph/trunk/examples/osglight/osglight.cpp

    r5927 r6051  
    4242                if (_firstTime==0.0)  
    4343                { 
    44                     _firstTime = frameStamp->getReferenceTime(); 
     44                    _firstTime = frameStamp->getSimulationTime(); 
    4545                } 
    4646                 
    47                 double phase = (frameStamp->getReferenceTime()-_firstTime)/_period; 
     47                double phase = (frameStamp->getSimulationTime()-_firstTime)/_period; 
    4848                phase -= floor(phase); 
    4949                phase *= (2.0 * osg::PI); 
  • OpenSceneGraph/trunk/examples/osgmotionblur/osgmotionblur.cpp

    r5968 r6051  
    2727    virtual void operator () (osg::GraphicsContext* gc) 
    2828    { 
    29         double t = gc->getState()->getFrameStamp()->getReferenceTime(); 
     29        double t = gc->getState()->getFrameStamp()->getSimulationTime(); 
    3030 
    3131        if (!cleared_) 
  • OpenSceneGraph/trunk/examples/osgparametric/osgparametric.cpp

    r5983 r6051  
    8383    { 
    8484        const osg::FrameStamp* fs = nv->getFrameStamp(); 
    85         float value = sinf(fs->getReferenceTime()); 
     85        float value = sinf(fs->getSimulationTime()); 
    8686        uniform->set(osg::Vec4(value,-value,-value,value)); 
    8787    } 
  • OpenSceneGraph/trunk/examples/osgphotoalbum/osgphotoalbum.cpp

    r5954 r6051  
    425425        if (framestamp) 
    426426        { 
    427             double t = framestamp->getReferenceTime(); 
     427            double t = framestamp->getSimulationTime(); 
    428428             
    429429            if (_rotation!=_targetRotation) 
  • OpenSceneGraph/trunk/examples/osgprecipitation/osgprecipitation.cpp

    r5954 r6051  
    3333            osgParticle::PrecipitationEffect* pe = dynamic_cast<osgParticle::PrecipitationEffect*>(node); 
    3434             
    35             float value = sin(nv->getFrameStamp()->getReferenceTime()); 
     35            float value = sin(nv->getFrameStamp()->getSimulationTime()); 
    3636            if (value<-0.5) 
    3737            { 
  • OpenSceneGraph/trunk/examples/osgprerender/osgprerender.cpp

    r5954 r6051  
    5050        { 
    5151            const osg::FrameStamp* fs = nv->getFrameStamp(); 
    52             double referenceTime = fs->getReferenceTime(); 
     52            double simulationTime = fs->getSimulationTime(); 
    5353            if (_firstCall) 
    5454            { 
    5555                _firstCall = false; 
    56                 _startTime = referenceTime; 
     56                _startTime = simulationTime; 
    5757            } 
    5858             
    59             _time = referenceTime-_startTime; 
     59            _time = simulationTime-_startTime; 
    6060             
    6161            drawable->accept(*this); 
  • OpenSceneGraph/trunk/examples/osgshaders/GL2Scene.cpp

    r5328 r6051  
    248248            if( _enabled ) 
    249249            { 
    250                 float angle = 2.0 * nv->getFrameStamp()->getReferenceTime(); 
     250                float angle = 2.0 * nv->getFrameStamp()->getSimulationTime(); 
    251251                float sine = sinf( angle );        // -1 -> 1 
    252252                float v01 = 0.5f * sine + 0.5f;        //  0 -> 1 
  • OpenSceneGraph/trunk/examples/osgshaderterrain/osgshaderterrain.cpp

    r5971 r6051  
    131131            // vertex shader using just Vec4 coefficients 
    132132            char vertexShaderSource[] =  
    133                "uniform float osg_FrameTime;\n" 
    134133               "uniform sampler2D terrainTexture;\n" 
    135134               "uniform vec3 terrainOrigin;\n" 
  • OpenSceneGraph/trunk/examples/osgshadow/osgshadow.cpp

    r6045 r6051  
    261261 
    262262    SwitchHandler(): 
    263         _childNum(0), 
    264         _frameNum(0) {} 
    265      
    266     virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa, osg::Object* object, osg::NodeVisitor* nv) 
     263        _childNum(0) {} 
     264     
     265    virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& /*aa*/, osg::Object* object, osg::NodeVisitor* /*nv*/) 
    267266    { 
    268267        osg::Switch* sw = dynamic_cast<osg::Switch*>(object); 
    269268        if (!sw) return false; 
    270          
    271         if (nv->getFrameStamp()) 
    272         { 
    273             if (nv->getFrameStamp()->getFrameNumber()==_frameNum) return false; 
    274             _frameNum = nv->getFrameStamp()->getFrameNumber(); 
    275         } 
     269 
     270        if (ea.getHandled()) return false; 
    276271         
    277272        switch(ea.getEventType()) 
     
    281276                if (ea.getKey()=='n') 
    282277                { 
    283                  
    284278                    ++_childNum; 
    285279                    if (_childNum >= sw->getNumChildren()) _childNum = 0; 
    286  
    287                     osg::notify(osg::NOTICE)<<"selecting "<<_childNum<<std::endl; 
    288280 
    289281                    sw->setSingleChildOn(_childNum); 
     
    302294    virtual ~SwitchHandler() {} 
    303295    unsigned int    _childNum; 
    304     int             _frameNum; 
    305296 
    306297}; 
     
    320311    return sw; 
    321312} 
     313 
     314 
     315 
     316class ShadowCallback : public osg::NodeCallback 
     317{ 
     318public: 
     319    ShadowCallback() {} 
     320     
     321    virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) 
     322    {  
     323        osg::notify(osg::NOTICE)<<"We're in callback"<<std::endl; 
     324         
     325        osgUtil::CullVisitor* cv = dynamic_cast<osgUtil::CullVisitor*>(nv); 
     326        if (!cv)  
     327        { 
     328            traverse(node,nv); 
     329            return; 
     330        } 
     331         
     332        osgUtil::RenderBin* original_bin = cv->getCurrentRenderBin(); 
     333         
     334        osgUtil::RenderBin* new_bin = original_bin->find_or_insert(999,"RenderBin"); 
     335 
     336        cv->setCurrentRenderBin(new_bin); 
     337 
     338        traverse(node,nv); 
     339         
     340        osg::notify(osg::NOTICE)<<"new_bin->getStateGraphList().size()= "<<new_bin->getStateGraphList().size()<<std::endl; 
     341        osg::notify(osg::NOTICE)<<"new_bin->getRenderBinList().size()= "<<new_bin->getRenderBinList().size()<<std::endl; 
     342        osg::notify(osg::NOTICE)<<"new_bin->getRenderLeafList().size()= "<<new_bin->getRenderLeafList().size()<<std::endl; 
     343         
     344        for(osgUtil::RenderBin::RenderBinList::iterator itr = new_bin->getRenderBinList().begin(); 
     345            itr != new_bin->getRenderBinList().end(); 
     346            ++itr) 
     347        { 
     348            osg::notify(osg::NOTICE)<<"bin num = "<<itr->first<<std::endl; 
     349        } 
     350         
     351        cv->setCurrentRenderBin(original_bin); 
     352 
     353    } 
     354}; 
     355 
     356 
    322357 
    323358int main(int argc, char** argv) 
     
    368403    while (arguments.read("--noShadow")) doShadow = false; 
    369404     
     405    bool cullCallback = false; 
     406    while (arguments.read("-c")) cullCallback = true; 
     407 
    370408    int screenNum = -1; 
    371409    while (arguments.read("--screen", screenNum)) viewer.setUpViewOnSingleScreen(screenNum); 
     
    502540 
    503541    } 
     542    else if (cullCallback) 
     543    { 
     544     
     545        int shadowVolumeBin = 1000; 
     546     
     547        group->setCullCallback(new ShadowCallback()); 
     548 
     549        group->addChild(model.get()); 
     550 
     551        { 
     552            osg::ref_ptr<osg::Geode> geode = new osg::Geode; 
     553            group->addChild(geode.get()); 
     554 
     555            occluder->computeShadowVolumeGeometry(lightpos, *shadowVolume); 
     556            shadowVolume->setDrawMode(drawMode); 
     557 
     558 
     559            if (drawMode == osgShadow::ShadowVolumeGeometry::STENCIL_TWO_SIDED) 
     560            { 
     561                osg::notify(osg::NOTICE)<<"STENCIL_TWO_SIDED seleteced"<<std::endl; 
     562 
     563                osg::StencilTwoSided* stencil = new osg::StencilTwoSided; 
     564                stencil->setFunction(osg::StencilTwoSided::BACK, osg::StencilTwoSided::ALWAYS,0,~0u); 
     565                stencil->setOperation(osg::StencilTwoSided::BACK, osg::StencilTwoSided::KEEP, osg::StencilTwoSided::KEEP, osg::StencilTwoSided::DECR_WRAP); 
     566                stencil->setFunction(osg::StencilTwoSided::FRONT, osg::StencilTwoSided::ALWAYS,0,~0u); 
     567                stencil->setOperation(osg::StencilTwoSided::FRONT, osg::StencilTwoSided::KEEP, osg::StencilTwoSided::KEEP, osg::StencilTwoSided::INCR_WRAP); 
     568 
     569 
     570                osg::ColorMask* colourMask = new osg::ColorMask(false, false, false, false); 
     571 
     572                osg::StateSet* ss_sv1 = geode->getOrCreateStateSet(); 
     573                ss_sv1->setRenderBinDetails(shadowVolumeBin, "RenderBin"); 
     574                ss_sv1->setAttributeAndModes(stencil,osg::StateAttribute::ON); 
     575                ss_sv1->setAttribute(colourMask); 
     576                ss_sv1->setMode(GL_CULL_FACE,osg::StateAttribute::OFF); 
     577 
     578 
     579            } 
     580            else 
     581            { 
     582                osg::notify(osg::NOTICE)<<"STENCIL_TWO_PASSES seleteced"<<std::endl; 
     583 
     584                osg::Stencil* stencil = new osg::Stencil; 
     585                stencil->setFunction(osg::Stencil::ALWAYS,0,~0u); 
     586                stencil->setOperation(osg::Stencil::KEEP, osg::Stencil::KEEP, osg::Stencil::KEEP); 
     587 
     588                osg::ColorMask* colourMask = new osg::ColorMask(false, false, false, false); 
     589 
     590                osg::StateSet* ss_sv1 = geode->getOrCreateStateSet(); 
     591                ss_sv1->setRenderBinDetails(shadowVolumeBin, "RenderBin"); 
     592                ss_sv1->setAttributeAndModes(stencil,osg::StateAttribute::ON); 
     593                ss_sv1->setAttribute(colourMask); 
     594                ss_sv1->setMode(GL_CULL_FACE,osg::StateAttribute::ON); 
     595 
     596                geode->addDrawable(shadowVolume.get()); 
     597            } 
     598 
     599        } 
     600 
     601    }     
    504602    else 
    505603    { 
     
    652750        if (updateLightPosition) 
    653751        { 
    654             float t = viewer.getFrameStamp()->getReferenceTime(); 
     752            float t = viewer.getFrameStamp()->getSimulationTime(); 
    655753            if (postionalLight) 
    656754            { 
  • OpenSceneGraph/trunk/examples/osgstereoimage/osgstereoimage.cpp

    r5960 r6051  
    209209    if (_autoSteppingActive && nv->getFrameStamp()) 
    210210    { 
    211         double time = nv->getFrameStamp()->getReferenceTime(); 
     211        double time = nv->getFrameStamp()->getSimulationTime(); 
    212212         
    213213        if (_firstTraversal) 
  • OpenSceneGraph/trunk/examples/osgtexture1D/osgtexture1D.cpp

    r5962 r6051  
    128128            { 
    129129                // we have an exisitng stateset, so lets animate it. 
    130                 animateState(stateset,nv->getFrameStamp()->getReferenceTime()); 
     130                animateState(stateset,nv->getFrameStamp()->getSimulationTime()); 
    131131            } 
    132132 
  • OpenSceneGraph/trunk/examples/osgtexture2D/osgtexture2D.cpp

    r5962 r6051  
    6464        if (nv->getFrameStamp()) 
    6565        { 
    66             double currTime = nv->getFrameStamp()->getReferenceTime(); 
     66            double currTime = nv->getFrameStamp()->getSimulationTime(); 
    6767            if (currTime-_prevTime>_delay)  
    6868            { 
     
    223223        if (nv->getFrameStamp()) 
    224224        { 
    225             double currTime = nv->getFrameStamp()->getReferenceTime(); 
     225            double currTime = nv->getFrameStamp()->getSimulationTime(); 
    226226            if (currTime-_prevTime>_delay)  
    227227            { 
     
    380380        if (nv->getFrameStamp()) 
    381381        { 
    382             double currTime = nv->getFrameStamp()->getReferenceTime(); 
     382            double currTime = nv->getFrameStamp()->getSimulationTime(); 
    383383            if (currTime-_prevTime>_delay)  
    384384            { 
     
    533533        if (nv->getFrameStamp()) 
    534534        { 
    535             double currTime = nv->getFrameStamp()->getReferenceTime(); 
     535            double currTime = nv->getFrameStamp()->getSimulationTime(); 
    536536            if (currTime-_prevTime>_delay)  
    537537            { 
  • OpenSceneGraph/trunk/examples/osgtexturerectangle/osgtexturerectangle.cpp

    r5962 r6051  
    5959 
    6060        if (nv->getFrameStamp()) { 
    61             double currTime = nv->getFrameStamp()->getReferenceTime(); 
     61            double currTime = nv->getFrameStamp()->getSimulationTime(); 
    6262            if (currTime - _prevTime > _delay) { 
    6363 
  • OpenSceneGraph/trunk/include/osg/FrameStamp

    r5328 r6051  
    4747        double getReferenceTime() const { return _referenceTime; } 
    4848         
     49        void setSimulationTime(double refTime) { _simulationTime = refTime; } 
     50        double getSimulationTime() const { return _simulationTime; } 
     51         
    4952        void setCalendarTime(const tm& calendarTime); 
    5053        void getCalendarTime(tm& calendarTime) const; 
     
    6366        int     _frameNumber; 
    6467        double  _referenceTime; 
    65          
     68        double  _simulationTime;         
    6669         
    6770        // member variables of time.h's tm structure, copied here to 
  • OpenSceneGraph/trunk/include/osgUtil/SceneView

    r5863 r6051  
    134134        enum ActiveUniforms 
    135135        { 
    136             FRAME_NUMBER_UNIFORM            = 0x1, 
    137             FRAME_TIME_UNIFORM              = 0x2, 
    138             DELTA_FRAME_TIME_UNIFORM        = 0x4, 
    139             VIEW_MATRIX_UNIFORM             = 0x8, 
    140             VIEW_MATRIX_INVERSE_UNIFORM     = 0x10, 
     136            FRAME_NUMBER_UNIFORM            = 1, 
     137            FRAME_TIME_UNIFORM              = 2, 
     138            DELTA_FRAME_TIME_UNIFORM        = 4, 
     139            SIMULATION_TIME_UNIFORM         = 8, 
     140            DELTA_SIMULATION_TIME_UNIFORM   = 16, 
     141            VIEW_MATRIX_UNIFORM             = 32, 
     142            VIEW_MATRIX_INVERSE_UNIFORM     = 64, 
    141143            DEFAULT_UNIFORMS                = FRAME_NUMBER_UNIFORM | 
    142144                                              FRAME_TIME_UNIFORM | 
    143145                                              DELTA_FRAME_TIME_UNIFORM | 
     146                                              SIMULATION_TIME_UNIFORM | 
     147                                              DELTA_SIMULATION_TIME_UNIFORM | 
    144148                                              VIEW_MATRIX_UNIFORM | 
    145149                                              VIEW_MATRIX_INVERSE_UNIFORM, 
     
    506510        int                                         _activeUniforms;         
    507511        double                                      _previousFrameTime; 
     512        double                                      _previousSimulationTime; 
    508513         
    509514        bool                                        _redrawInterlacedStereoStencilMask; 
  • OpenSceneGraph/trunk/include/osgViewer/CompositeViewer

    r5999 r6051  
    1919 
    2020namespace osgViewer { 
    21  
    22 // WARNING ** Under development do not use, yet :-)  
    2321 
    2422/** CompsiteViewer holds a or more views to a one more scenes.*/ 
     
    114112        /** Render a complete new frame. 
    115113          * Calls advance(), eventTraversal(), updateTraversal(), renderingTraversals(). */ 
    116         virtual void frame(); 
     114        virtual void frame(double simulationTime=USE_REFERENCE_TIME); 
    117115 
    118         virtual void advance(); 
     116        virtual void advance(double simulationTime=USE_REFERENCE_TIME); 
    119117 
    120118        virtual void eventTraversal(); 
  • OpenSceneGraph/trunk/include/osgViewer/Export

    r5679 r6051  
    1515#ifndef OSGVIEWER_EXPORT_ 
    1616#define OSGVIEWER_EXPORT_ 1 
     17 
     18#define USE_REFERENCE_TIME DBL_MAX 
    1719 
    1820#if defined(WIN32) && !(defined(__CYGWIN__) || defined(__MINGW32__)) 
  • OpenSceneGraph/trunk/include/osgViewer/SimpleViewer

    r5917 r6051  
    6262          * Calls frameAdvance(), frameEventTraversal(), frameUpateTraversal(), frameCullTraversal() and frameDrawTraversal(). 
    6363          * Note, no internal makeCurrent() is issued before, or swap buffers called after frame(), these operations are the responsibility of the calling code.*/  
    64         virtual void frame(); 
     64        virtual void frame(double simulationTime=USE_REFERENCE_TIME); 
    6565 
    66         virtual void advance(); 
     66        virtual void advance(double simulationTime=USE_REFERENCE_TIME); 
    6767        virtual void eventTraversal(); 
    6868        virtual void updateTraversal(); 
  • OpenSceneGraph/trunk/include/osgViewer/Viewer

    r5995 r6051  
    104104        /** Render a complete new frame. 
    105105          * Calls advance(), eventTraversal(), updateTraversal(), renderingTraversals(). */ 
    106         virtual void frame(); 
     106        virtual void frame(double simulationTime=USE_REFERENCE_TIME); 
    107107 
    108         virtual void advance(); 
     108        virtual void advance(double simulationTime=USE_REFERENCE_TIME); 
    109109 
    110110        virtual void eventTraversal(); 
  • OpenSceneGraph/trunk/src/osg/AnimationPath.cpp

    r5757 r6051  
    231231        nv->getFrameStamp()) 
    232232    { 
    233         double time = nv->getFrameStamp()->getReferenceTime(); 
     233        double time = nv->getFrameStamp()->getSimulationTime(); 
    234234        _latestTime = time; 
    235235 
  • OpenSceneGraph/trunk/src/osg/FrameStamp.cpp

    r5328 r6051  
    1919    _frameNumber=0; 
    2020    _referenceTime=0; 
     21    _simulationTime=0; 
    2122 
    2223    tm_sec=0;            /* Seconds.        [0-60] (1 leap second) */ 
  • OpenSceneGraph/trunk/src/osg/Sequence.cpp

    r5702 r6051  
    128128        { 
    129129     
    130             double t = framestamp->getReferenceTime(); 
     130            double t = framestamp->getSimulationTime(); 
    131131            if (_last == -1.0) 
    132132                _last = t; 
  • OpenSceneGraph/trunk/src/osgParticle/ParticleProcessor.cpp

    r5858 r6051  
    7474 
    7575                    // retrieve the current time 
    76                     double t = nv.getFrameStamp()->getReferenceTime(); 
     76                    double t = nv.getFrameStamp()->getSimulationTime(); 
    7777 
    7878                    // reset this processor if we've reached the reset point 
  • OpenSceneGraph/trunk/src/osgParticle/ParticleSystemUpdater.cpp

    r5858 r6051  
    3333                _frameNumber = nv.getFrameStamp()->getFrameNumber(); 
    3434 
    35                 double t = nv.getFrameStamp()->getReferenceTime(); 
     35                double t = nv.getFrameStamp()->getSimulationTime(); 
    3636                if (_t0 != -1.0) 
    3737                { 
  • OpenSceneGraph/trunk/src/osgParticle/PrecipitationEffect.cpp

    r5708 r6051  
    199199        if (nv.getFrameStamp()) 
    200200        { 
    201             double currentTime = nv.getFrameStamp()->getReferenceTime(); 
     201            double currentTime = nv.getFrameStamp()->getSimulationTime(); 
    202202            static double previousTime = currentTime; 
    203203            double delta = currentTime - previousTime; 
     
    516516            "uniform float particleSize;\n" 
    517517            "\n" 
    518             "uniform float osg_FrameTime;\n" 
    519             "uniform float osg_DeltaFrameTime;\n" 
     518            "uniform float osg_SimulationTime;\n" 
     519            "uniform float osg_DeltaSimulationTime;\n" 
    520520            "\n" 
    521521            "varying vec4 colour;\n" 
     
    529529            "\n" 
    530530            "    vec4 v_previous = gl_Vertex;\n" 
    531             "    v_previous.z = fract( (osg_FrameTime - startTime)*inversePeriod - offset);\n" 
     531            "    v_previous.z = fract( (osg_SimulationTime - startTime)*inversePeriod - offset);\n" 
    532532            "    \n" 
    533533            "    vec4 v_current =  v_previous;\n" 
    534             "    v_current.z += (osg_DeltaFrameTime*inversePeriod);\n" 
     534            "    v_current.z += (osg_DeltaSimulationTime*inversePeriod);\n" 
    535535            "    \n" 
    536536            "\n" 
     
    590590            "uniform float particleSize;\n" 
    591591            "\n" 
    592             "uniform float osg_FrameTime;\n" 
    593             "uniform float osg_DeltaFrameTime;\n" 
     592            "uniform float osg_SimulationTime;\n" 
     593            "uniform float osg_DeltaSimulationTime;\n" 
    594594            "uniform mat4 previousModelViewMatrix;\n" 
    595595            "\n" 
     
    604604            "\n" 
    605605            "    vec4 v_previous = gl_Vertex;\n" 
    606             "    v_previous.z = fract( (osg_FrameTime - startTime)*inversePeriod - offset);\n" 
     606            "    v_previous.z = fract( (osg_SimulationTime - startTime)*inversePeriod - offset);\n" 
    607607            "    \n" 
    608608            "    vec4 v_current =  v_previous;\n" 
    609             "    v_current.z += (osg_DeltaFrameTime*inversePeriod);\n" 
     609            "    v_current.z += (osg_DeltaSimulationTime*inversePeriod);\n" 
    610610            "    \n" 
    611611            "    colour = particleColour;\n" 
     
    660660            "uniform float particleSize;\n" 
    661661            "\n" 
    662             "uniform float osg_FrameTime;\n" 
     662            "uniform float osg_SimulationTime;\n" 
    663663            "\n" 
    664664            "varying vec4 colour;\n" 
     
    670670            "\n" 
    671671            "    vec4 v_current = gl_Vertex;\n" 
    672             "    v_current.z = fract( (osg_FrameTime - startTime)*inversePeriod - offset);\n" 
     672            "    v_current.z = fract( (osg_SimulationTime - startTime)*inversePeriod - offset);\n" 
    673673            "   \n" 
    674674            "    colour = particleColour;\n" 
  • OpenSceneGraph/trunk/src/osgPlugins/Inventor/PendulumCallback.cpp

    r2915 r6051  
    3535    if (nv->getTraversalNumber()!=_previousTraversalNumber) 
    3636    { 
    37         double currentTime = fs->getReferenceTime(); 
     37        double currentTime = fs->getSimulationTime(); 
    3838        _angle += (currentTime - _previousTime) * 2 * osg::PI * _frequency; 
    3939         
  • OpenSceneGraph/trunk/src/osgPlugins/Inventor/ShuttleCallback.cpp

    r2915 r6051  
    3434    if (nv->getTraversalNumber()!=_previousTraversalNumber) 
    3535    { 
    36         double currentTime = fs->getReferenceTime(); 
     36        double currentTime = fs->getSimulationTime(); 
    3737        _angle += (currentTime - _previousTime) * 2 * osg::PI * _frequency; 
    3838         
  • OpenSceneGraph/trunk/src/osgPlugins/geo/ReaderWriterGEO.cpp

    r5928 r6051  
    9494    _lastFrameTick=_frameTick; 
    9595     
    96     double time = _frameStamp->getReferenceTime(); 
     96    double time = _frameStamp->getSimulationTime(); 
    9797    intVars->update( _frameStamp); 
    9898    moveit(time); 
     
    133133            // a visitor with setTraversalMode(TraversalMode==TRAVERSE_ALL_CHILDREN)? 
    134134        traverse(node,nv); 
    135         //    std::cout<<"update callback - post traverse"<< (float)_frameStamp->getReferenceTime() <<std::endl; 
     135        //    std::cout<<"update callback - post traverse"<< (float)_frameStamp->getSimulationTime() <<std::endl; 
    136136    } 
    137137private: 
     
    20672067 
    20682068void internalVars::update(const osg::FrameStamp *_frameStamp) { 
    2069     double stmptime=_frameStamp->getReferenceTime(); 
     2069    double stmptime=_frameStamp->getSimulationTime(); 
    20702070    int iord=0; 
    20712071    for (std::vector<geoValue>::const_iterator itr=vars.begin(); //gfl.begin(); 
     
    20892089                    timestart=newtime->tm_hour*3600 +newtime->tm_min*60+ newtime->tm_sec; 
    20902090                } 
    2091                 double timeofday=timestart+_frameStamp->getReferenceTime(); 
     2091                double timeofday=timestart+_frameStamp->getSimulationTime(); 
    20922092                vars[iord].setVal(timeofday); 
    20932093            } 
    20942094            break; 
    20952095        case GEO_DB_INTERNAL_VAR_ELAPSED_TIME: 
    2096             vars[iord].setVal(_frameStamp->getReferenceTime()); 
     2096            vars[iord].setVal(_frameStamp->getSimulationTime()); 
    20972097            break; 
    20982098        case GEO_DB_INTERNAL_VAR_SINE: 
     
    21062106            break; 
    21072107        case GEO_DB_INTERNAL_VAR_MOUSE_X: // this is all windowing system dependent 
    2108             //    vars[iord]=_frameStamp->getReferenceTime(); 
     2108            //    vars[iord]=_frameStamp->getSimulationTime(); 
    21092109            break; 
    21102110        case GEO_DB_INTERNAL_VAR_MOUSE_Y: 
    2111             //    vars[iord]=_frameStamp->getReferenceTime(); 
     2111            //    vars[iord]=_frameStamp->getSimulationTime(); 
    21122112            break; 
    21132113        case GEO_DB_INTERNAL_VAR_LEFT_MOUSE: 
    2114             //    vars[iord]=_frameStamp->getReferenceTime(); 
     2114            //    vars[iord]=_frameStamp->getSimulationTime(); 
    21152115            break; 
    21162116        case GEO_DB_INTERNAL_VAR_MIDDLE_MOUSE: 
    2117             //    vars[iord]=_frameStamp->getReferenceTime(); 
     2117            //    vars[iord]=_frameStamp->getSimulationTime(); 
    21182118            break; 
    21192119        case GEO_DB_INTERNAL_VAR_RIGHT_MOUSE: 
    2120             //    vars[iord]=_frameStamp->getReferenceTime(); 
     2120            //    vars[iord]=_frameStamp->getSimulationTime(); 
    21212121            break; 
    21222122        case GEO_DB_INTERNAL_VAR_TEMP_FLOAT: 
    2123             //    vars[iord]=_frameStamp->getReferenceTime(); 
     2123            //    vars[iord]=_frameStamp->getSimulationTime(); 
    21242124            break; 
    21252125        case GEO_DB_INTERNAL_VAR_TEMP_INT: 
    2126             //    vars[iord]=_frameStamp->getReferenceTime(); 
     2126            //    vars[iord]=_frameStamp->getSimulationTime(); 
    21272127            break; 
    21282128        case GEO_DB_INTERNAL_VAR_TEMP_BOOL: 
    2129             //    vars[iord]=_frameStamp->getReferenceTime(); 
     2129            //    vars[iord]=_frameStamp->getSimulationTime(); 
    21302130            break; 
    21312131        case GEO_DB_INTERNAL_VAR_TEMP_STRING: 
    2132             //    vars[iord]=_frameStamp->getReferenceTime(); 
     2132            //    vars[iord]=_frameStamp->getSimulationTime(); 
    21332133            break; 
    21342134        } 
    21352135    } 
    2136     //    std::cout<<"update callback - post traverse"<< (float)_frameStamp->getReferenceTime() <<std::endl; 
     2136    //    std::cout<<"update callback - post traverse"<< (float)_frameStamp->getSimulationTime() <<std::endl; 
    21372137} 
    21382138 
  • OpenSceneGraph/trunk/src/osgProducer/OsgCameraGroup.cpp

    r5856 r6051  
    735735        double time_since_start = _timer.delta_s(_start_tick,_timer.tick()); 
    736736        _frameStamp->setReferenceTime(time_since_start); 
     737        _frameStamp->setSimulationTime(_frameStamp->getReferenceTime()); 
    737738    } 
    738739    else 
     
    742743 
    743744        _frameStamp->setReferenceTime(estimatedSwapTimeForFrame); 
     745        _frameStamp->setSimulationTime(_frameStamp->getReferenceTime()); 
    744746    } 
    745747}         
  • OpenSceneGraph/trunk/src/osgSim/DOFTransform.cpp

    r5328 r6051  
    7373        if ((nv.getTraversalNumber()!=_previousTraversalNumber) && nv.getFrameStamp()) 
    7474        { 
    75             double newTime = nv.getFrameStamp()->getReferenceTime(); 
     75            double newTime = nv.getFrameStamp()->getSimulationTime(); 
    7676 
    7777            animate((float)(newTime-_previousTime)); 
  • OpenSceneGraph/trunk/src/osgSim/LightPointDrawable.cpp

    r5328 r6051  
    2121    osg::Drawable(), 
    2222    _endian(osg::getCpuByteOrder()), 
    23     _referenceTime(0.0), 
    24     _referenceTimeInterval(0.0) 
     23    _simulationTime(0.0), 
     24    _simulationTimeInterval(0.0) 
    2525{ 
    2626 
     
    4646LightPointDrawable::LightPointDrawable(const LightPointDrawable& lpd,const osg::CopyOp& copyop): 
    4747    osg::Drawable(lpd,copyop), 
    48     _referenceTime(lpd._referenceTime), 
    49     _referenceTimeInterval(lpd._referenceTimeInterval), 
     48    _simulationTime(lpd._simulationTime), 
     49    _simulationTimeInterval(lpd._simulationTimeInterval), 
    5050    _sizedOpaqueLightPointList(lpd._sizedOpaqueLightPointList), 
    5151    _sizedAdditiveLightPointList(lpd._sizedAdditiveLightPointList), 
  • OpenSceneGraph/trunk/src/osgSim/LightPointDrawable.h

    r5812 r6051  
    8484 
    8585 
    86         void setReferenceTime(double time) 
     86        void setSimulationTime(double time) 
    8787        { 
    88             _referenceTime = time; 
    89             _referenceTimeInterval = 0.0; 
     88            _simulationTime = time; 
     89            _simulationTimeInterval = 0.0; 
    9090        } 
    9191 
    92         void updateReferenceTime(double time) 
     92        void updateSimulationTime(double time) 
    9393        { 
    94             _referenceTimeInterval = osg::clampAbove(time-_referenceTime,0.0); 
    95             _referenceTime = time; 
     94            _simulationTimeInterval = osg::clampAbove(time-_simulationTime,0.0); 
     95            _simulationTime = time; 
    9696        } 
    9797         
    98         double getReferenceTime() const { return _referenceTime; } 
    99         double getReferenceTimeInterval() const { return _referenceTimeInterval; } 
     98        double getSimulationTime() const { return _simulationTime; } 
     99        double getSimulationTimeInterval() const { return _simulationTimeInterval; } 
    100100         
    101101        virtual osg::BoundingBox computeBound() const; 
     
    107107        osg::Endian                     _endian; 
    108108                
    109         double                          _referenceTime; 
    110         double                          _referenceTimeInterval; 
     109        double                          _simulationTime; 
     110        double                          _simulationTimeInterval; 
    111111         
    112112        typedef std::vector<ColorPosition>  LightPointList; 
  • OpenSceneGraph/trunk/src/osgSim/LightPointNode.cpp

    r5328 r6051  
    201201            if (cv->getFrameStamp()) 
    202202            { 
    203                 drawable->setReferenceTime(cv->getFrameStamp()->getReferenceTime()); 
     203                drawable->setSimulationTime(cv->getFrameStamp()->getSimulationTime()); 
    204204            } 
    205205        } 
     
    225225            if (cv->getFrameStamp()) 
    226226            { 
    227                 drawable->updateReferenceTime(cv->getFrameStamp()->getReferenceTime()); 
     227                drawable->updateSimulationTime(cv->getFrameStamp()->getSimulationTime()); 
    228228            } 
    229229 
     
    247247        const osg::Vec3 eyePoint = cv->getEyeLocal(); 
    248248         
    249         double time=drawable->getReferenceTime(); 
    250         double timeInterval=drawable->getReferenceTimeInterval(); 
     249        double time=drawable->getSimulationTime(); 
     250        double timeInterval=drawable->getSimulationTimeInterval(); 
    251251         
    252252        const osg::Polytope clipvol(cv->getCurrentCullingSet().getFrustum()); 
  • OpenSceneGraph/trunk/src/osgUtil/SceneView.cpp

    r6018 r6051  
    112112     
    113113    _previousFrameTime = 0; 
     114    _previousSimulationTime = 0; 
    114115     
    115116    _redrawInterlacedStereoStencilMask = true; 
     
    140141     
    141142    _previousFrameTime = rhs._previousFrameTime; 
     143    _previousSimulationTime = rhs._previousSimulationTime; 
    142144     
    143145    _redrawInterlacedStereoStencilMask = rhs._redrawInterlacedStereoStencilMask; 
     
    330332        osg::Uniform* uniform = _localStateSet->getOrCreateUniform("osg_DeltaFrameTime",osg::Uniform::FLOAT); 
    331333        uniform->set(delta_frame_time); 
     334    } 
     335     
     336    if ((_activeUniforms & SIMULATION_TIME_UNIFORM) && _frameStamp.valid()) 
     337    { 
     338        osg::Uniform* uniform = _localStateSet->getOrCreateUniform("osg_SimulationTime",osg::Uniform::FLOAT); 
     339        uniform->set(static_cast<float>(_frameStamp->getSimulationTime())); 
     340    } 
     341     
     342    if ((_activeUniforms & DELTA_SIMULATION_TIME_UNIFORM) && _frameStamp.valid()) 
     343    { 
     344        float delta_simulation_time = (_previousSimulationTime != 0.0) ? static_cast<float>(_frameStamp->getSimulationTime()-_previousSimulationTime) : 0.0f; 
     345        _previousSimulationTime = _frameStamp->getSimulationTime(); 
     346         
     347        osg::Uniform* uniform = _localStateSet->getOrCreateUniform("osg_DeltaSimulationTime",osg::Uniform::FLOAT); 
     348        uniform->set(delta_simulation_time); 
    332349    } 
    333350     
  • OpenSceneGraph/trunk/src/osgUtil/TransformCallback.cpp

    r5328 r6051  
    3838        if (!fs) return; // not frame stamp, no handle on the time so can't move. 
    3939         
    40         double newTime = fs->getReferenceTime(); 
     40        double newTime = fs->getSimulationTime(); 
    4141 
    4242        // ensure that we do not operate on this node more than 
  • OpenSceneGraph/trunk/src/osgViewer/CompositeViewer.cpp

    r6047 r6051  
    3636    _frameStamp->setFrameNumber(0); 
    3737    _frameStamp->setReferenceTime(0); 
     38    _frameStamp->setSimulationTime(0); 
    3839 
    3940    setEventQueue(new osgGA::EventQueue); 
     
    723724 
    724725 
    725 void CompositeViewer::frame() 
     726void CompositeViewer::frame(double simulationTime) 
    726727{ 
    727728    if (_done) return; 
     
    740741        _firstFrame = false; 
    741742    } 
    742     advance(); 
     743    advance(simulationTime); 
    743744     
    744745    eventTraversal(); 
     
    747748} 
    748749 
    749 void CompositeViewer::advance() 
     750void CompositeViewer::advance(double simulationTime) 
    750751{ 
    751752    if (_done) return; 
    752753 
     754    _frameStamp->setFrameNumber(_frameStamp->getFrameNumber()+1); 
     755 
    753756    _frameStamp->setReferenceTime( osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick()) ); 
    754     _frameStamp->setFrameNumber(_frameStamp->getFrameNumber()+1); 
     757 
     758    if (simulationTime==USE_REFERENCE_TIME) 
     759    { 
     760        _frameStamp->setSimulationTime(_frameStamp->getReferenceTime()); 
     761    } 
     762    else 
     763    { 
     764        _frameStamp->setSimulationTime(simulationTime); 
     765    } 
    755766} 
    756767 
  • OpenSceneGraph/trunk/src/osgViewer/SimpleViewer.cpp

    r6047 r6051  
    2626    _frameStamp->setFrameNumber(0); 
    2727    _frameStamp->setReferenceTime(0); 
     28    _frameStamp->setSimulationTime(0); 
    2829 
    2930    _eventVisitor = new osgGA::EventVisitor; 
     
    123124} 
    124125 
    125 void SimpleViewer::frame() 
     126void SimpleViewer::frame(double simulationTime) 
    126127{ 
    127128    if (_firstFrame) 
     
    131132    } 
    132133 
    133     advance(); 
     134    advance(simulationTime); 
    134135    eventTraversal(); 
    135136    updateTraversal(); 
     
    137138} 
    138139 
    139 void SimpleViewer::advance() 
    140 { 
     140void SimpleViewer::advance(double simulationTime) 
     141{ 
     142    _frameStamp->setFrameNumber(_frameStamp->getFrameNumber()+1); 
     143 
    141144    _frameStamp->setReferenceTime(osg::Timer::instance()->time_s()); 
    142     _frameStamp->setFrameNumber(_frameStamp->getFrameNumber()+1); 
     145 
     146    if (simulationTime==USE_REFERENCE_TIME) 
     147    { 
     148        _frameStamp->setSimulationTime(_frameStamp->getReferenceTime()); 
     149    } 
     150    else 
     151    { 
     152        _frameStamp->setSimulationTime(simulationTime); 
     153    } 
    143154 
    144155    _sceneView->setFrameStamp(_frameStamp.get()); 
  • OpenSceneGraph/trunk/src/osgViewer/Viewer.cpp

    r6047 r6051  
    3333    _frameStamp->setFrameNumber(0); 
    3434    _frameStamp->setReferenceTime(0); 
     35    _frameStamp->setSimulationTime(0); 
    3536 
    3637    _eventVisitor = new osgGA::EventVisitor; 
     
    785786 
    786787 
    787 void Viewer::frame() 
     788void Viewer::frame(double simulationTime) 
    788789{ 
    789790    if (_done) return; 
     
    802803        _firstFrame = false; 
    803804    } 
    804     advance(); 
     805    advance(simulationTime); 
    805806     
    806807    eventTraversal(); 
     
    809810} 
    810811 
    811 void Viewer::advance() 
     812void Viewer::advance(double simulationTime) 
    812813{ 
    813814    if (_done) return; 
     
    816817    int previousFrameNumber = _frameStamp->getFrameNumber(); 
    817818 
     819    _frameStamp->setFrameNumber(_frameStamp->getFrameNumber()+1); 
     820 
    818821    _frameStamp->setReferenceTime( osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick()) ); 
    819     _frameStamp->setFrameNumber(_frameStamp->getFrameNumber()+1); 
     822 
     823    if (simulationTime==USE_REFERENCE_TIME) 
     824    { 
     825        _frameStamp->setSimulationTime(_frameStamp->getReferenceTime()); 
     826    } 
     827    else 
     828    { 
     829        _frameStamp->setSimulationTime(simulationTime); 
     830    } 
    820831     
    821832    if (getStats()) 
  • OpenSceneGraph/trunk/src/osgWrappers/osg/FrameStamp.cpp

    r5659 r6051  
    4646                  "", 
    4747                  ""); 
     48        I_Method1(void, setSimulationTime, IN, double, refTime, 
     49                  __void__setSimulationTime__double, 
     50                  "", 
     51                  ""); 
     52        I_Method0(double, getSimulationTime, 
     53                  __double__getSimulationTime, 
     54                  "", 
     55                  ""); 
    4856        I_Method1(void, setCalendarTime, IN, const tm &, calendarTime, 
    4957                  __void__setCalendarTime__C5_tm_R1, 
     
    6371                         __double__getReferenceTime,  
    6472                         __void__setReferenceTime__double); 
     73        I_SimpleProperty(double, SimulationTime,  
     74                         __double__getSimulationTime,  
     75                         __void__setSimulationTime__double); 
    6576END_REFLECTOR 
    6677 
  • OpenSceneGraph/trunk/src/osgWrappers/osgUtil/SceneView.cpp

    r5918 r6051  
    5757        I_EnumLabel(osgUtil::SceneView::FRAME_TIME_UNIFORM); 
    5858        I_EnumLabel(osgUtil::SceneView::DELTA_FRAME_TIME_UNIFORM); 
     59        I_EnumLabel(osgUtil::SceneView::SIMULATION_TIME_UNIFORM); 
     60        I_EnumLabel(osgUtil::SceneView::DELTA_SIMULATION_TIME_UNIFORM); 
    5961        I_EnumLabel(osgUtil::SceneView::VIEW_MATRIX_UNIFORM); 
    6062        I_EnumLabel(osgUtil::SceneView::VIEW_MATRIX_INVERSE_UNIFORM); 
  • OpenSceneGraph/trunk/src/osgWrappers/osgViewer/CompositeViewer.cpp

    r6002 r6051  
    152152                  "Execute a main frame loop. ", 
    153153                  "Equivialant to while (!viewer.done()) viewer.frame(); Also calls realize() if the viewer is not already realized, and installs trackball manipulator if one is not already assigned."); 
    154         I_Method0(void, frame, 
    155                   __void__frame, 
    156                   "Render a complete new frame. ", 
    157                   "Calls advance(), eventTraversal(), updateTraversal(), renderingTraversals(). "); 
    158         I_Method0(void, advance, 
    159                   __void__advance, 
    160                   "", 
    161                   ""); 
     154        I_MethodWithDefaults1(void, frame, IN, double, simulationTime, USE_REFERENCE_TIME, 
     155                              __void__frame__double, 
     156                              "Render a complete new frame. ", 
     157                              "Calls advance(), eventTraversal(), updateTraversal(), renderingTraversals(). "); 
     158        I_MethodWithDefaults1(void, advance, IN, double, simulationTime, USE_REFERENCE_TIME, 
     159                              __void__advance__double, 
     160                              "", 
     161                              ""); 
    162162        I_Method0(void, eventTraversal, 
    163163                  __void__eventTraversal, 
  • OpenSceneGraph/trunk/src/osgWrappers/osgViewer/SimpleViewer.cpp

    r5918 r6051  
    9090                  "", 
    9191                  ""); 
    92         I_Method0(void, frame, 
    93                   __void__frame, 
    94                   "Render a complete new frame. ", 
    95                   "Calls frameAdvance(), frameEventTraversal(), frameUpateTraversal(), frameCullTraversal() and frameDrawTraversal(). Note, no internal makeCurrent() is issued before, or swap buffers called after frame(), these operations are the responsibility of the calling code. "); 
    96         I_Method0(void, advance, 
    97                   __void__advance, 
    98                   "", 
    99                   ""); 
     92        I_MethodWithDefaults1(void, frame, IN, double, simulationTime, USE_REFERENCE_TIME, 
     93                              __void__frame__double, 
     94                              "Render a complete new frame. ", 
     95                              "Calls frameAdvance(), frameEventTraversal(), frameUpateTraversal(), frameCullTraversal() and frameDrawTraversal(). Note, no internal makeCurrent() is issued before, or swap buffers called after frame(), these operations are the responsibility of the calling code. "); 
     96        I_MethodWithDefaults1(void, advance, IN, double, simulationTime, USE_REFERENCE_TIME, 
     97                              __void__advance__double, 
     98                              "", 
     99                              ""); 
    100100        I_Method0(void, eventTraversal, 
    101101                  __void__eventTraversal, 
  • OpenSceneGraph/trunk/src/osgWrappers/osgViewer/Viewer.cpp

    r5991 r6051  
    125125                  "Execute a main frame loop. ", 
    126126                  "Equivialant to while (!viewer.done()) viewer.frame(); Also calls realize() if the viewer is not already realized, and installs trackball manipulator if one is not already assigned."); 
    127         I_Method0(void, frame, 
    128                   __void__frame, 
    129                   "Render a complete new frame. ", 
    130                   "Calls advance(), eventTraversal(), updateTraversal(), renderingTraversals(). "); 
    131         I_Method0(void, advance, 
    132                   __void__advance, 
    133                   "", 
    134                   ""); 
     127        I_MethodWithDefaults1(void, frame, IN, double, simulationTime, USE_REFERENCE_TIME, 
     128                              __void__frame__double, 
     129                              "Render a complete new frame. ", 
     130                              "Calls advance(), eventTraversal(), updateTraversal(), renderingTraversals(). "); 
     131        I_MethodWithDefaults1(void, advance, IN, double, simulationTime, USE_REFERENCE_TIME, 
     132                              __void__advance__double, 
     133                              "", 
     134                              ""); 
    135135        I_Method0(void, eventTraversal, 
    136136                  __void__eventTraversal,