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:
@@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user