Addd OsgSceneHandler::s/getCleanUpOnNextFrame() and support for it in the draw() method,

when CleanUpOnNextFrame is enabled the next frame simple deleted OpenGL objects without doing any draw traversal.
This commit is contained in:
Robert Osfield
2005-11-10 11:39:01 +00:00
parent e9c25115fb
commit e8d6df7583
4 changed files with 25 additions and 8 deletions

View File

@@ -76,18 +76,26 @@ class OSGPRODUCER_EXPORT OsgSceneHandler : public Producer::Camera::SceneHandler
Callback* getCullCallback() { return _cullCallback.get(); }
const Callback* getCullCallback() const { return _cullCallback.get(); }
virtual void draw(Producer::Camera& camera)
{
if (_flushOfAllDeletedGLObjectsOnNextFrame && _sceneView.valid())
if (_cleanUpOnNextFrame)
{
_sceneView->flushAllDeletedGLObjects();
_flushOfAllDeletedGLObjectsOnNextFrame = false;
_cleanUpOnNextFrame = false;
}
else
{
if (_flushOfAllDeletedGLObjectsOnNextFrame && _sceneView.valid())
{
_sceneView->flushAllDeletedGLObjects();
}
if (_drawCallback.valid()) (*_drawCallback)(*this,camera);
else drawImplementation(camera);
_flushOfAllDeletedGLObjectsOnNextFrame = false;
}
if (_drawCallback.valid()) (*_drawCallback)(*this,camera);
else drawImplementation(camera);
_flushOfAllDeletedGLObjectsOnNextFrame = false;
}
virtual void drawImplementation(Producer::Camera& camera);
@@ -102,6 +110,10 @@ class OSGPRODUCER_EXPORT OsgSceneHandler : public Producer::Camera::SceneHandler
bool getFlushOfAllDeletedGLObjectsOnNextFrame() const { return _flushOfAllDeletedGLObjectsOnNextFrame; }
void setCleanUpOnNextFrame(bool flag) { _cleanUpOnNextFrame = flag; }
bool getCleanUpOnNextFrame() const { return _cleanUpOnNextFrame; }
protected:
virtual ~OsgSceneHandler() {}
@@ -117,6 +129,7 @@ class OSGPRODUCER_EXPORT OsgSceneHandler : public Producer::Camera::SceneHandler
osg::Timer_t _previousFrameStartTick;
bool _flushOfAllDeletedGLObjectsOnNextFrame;
bool _cleanUpOnNextFrame;
};
}