From cdab058b32319645630f18151126bdb69c5e3e11 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 6 May 2005 10:32:31 +0000 Subject: [PATCH] Added osg_DeltaFrameTime uniform to default set. --- include/osgUtil/SceneView | 9 ++++++--- src/osgUtil/SceneView.cpp | 13 ++++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/include/osgUtil/SceneView b/include/osgUtil/SceneView index f08dee03c..dd1f5d617 100644 --- a/include/osgUtil/SceneView +++ b/include/osgUtil/SceneView @@ -135,10 +135,12 @@ class OSGUTIL_EXPORT SceneView : public osg::Referenced, public osg::CullSetting { FRAME_NUMBER_UNIFORM = 0x1, FRAME_TIME_UNIFORM = 0x2, - VIEW_MATRIX_UNIFORM = 0x4, - INVERSE_VIEW_MATRIX_UNIFORM = 0x8, + DELTA_FRAME_TIME_UNIFORM = 0x4, + VIEW_MATRIX_UNIFORM = 0x8, + INVERSE_VIEW_MATRIX_UNIFORM = 0x16, DEFAULT_UNIFORMS = FRAME_NUMBER_UNIFORM | FRAME_TIME_UNIFORM | + DELTA_FRAME_TIME_UNIFORM | VIEW_MATRIX_UNIFORM | INVERSE_VIEW_MATRIX_UNIFORM, ALL_UNIFORMS = 0xFFFFFFFF @@ -507,7 +509,8 @@ class OSGUTIL_EXPORT SceneView : public osg::Referenced, public osg::CullSetting bool _requiresFlush; - int _activeUniforms; + int _activeUniforms; + double _previousFrameTime; }; diff --git a/src/osgUtil/SceneView.cpp b/src/osgUtil/SceneView.cpp index b1cc34f51..339a60923 100644 --- a/src/osgUtil/SceneView.cpp +++ b/src/osgUtil/SceneView.cpp @@ -54,6 +54,8 @@ SceneView::SceneView(DisplaySettings* ds) _requiresFlush = true; _activeUniforms = DEFAULT_UNIFORMS; + + _previousFrameTime = 0; } @@ -207,7 +209,16 @@ void SceneView::updateUniforms() osg::Uniform* uniform = _localStateSet->getOrCreateUniform("osg_FrameTime",osg::Uniform::FLOAT); uniform->set(static_cast(_frameStamp->getReferenceTime())); } - + + if ((_activeUniforms & DELTA_FRAME_TIME_UNIFORM) && _frameStamp.valid()) + { + float delta_frame_time = (_previousFrameTime != 0.0) ? static_cast(_frameStamp->getReferenceTime()-_previousFrameTime) : 0.0f; + _previousFrameTime = _frameStamp->getReferenceTime(); + + osg::Uniform* uniform = _localStateSet->getOrCreateUniform("osg_DeltaFrameTime",osg::Uniform::FLOAT); + uniform->set(delta_frame_time); + } + if (_activeUniforms & VIEW_MATRIX_UNIFORM) { osg::Uniform* uniform = _localStateSet->getOrCreateUniform("osg_ViewMatrix",osg::Uniform::FLOAT_MAT4);