Restore UnrefQueue to destruct animation asynchronously

This commit is contained in:
elsid 2022-07-24 20:55:03 +02:00
parent 1e7989c5e5
commit 0614b82452
No known key found for this signature in database
GPG key ID: 4DE04C198CBA7625
12 changed files with 109 additions and 14 deletions

View file

@ -0,0 +1,28 @@
#include "unrefqueue.hpp"
namespace SceneUtil
{
namespace
{
struct ClearVector final : SceneUtil::WorkItem
{
std::vector<osg::ref_ptr<osg::Referenced>> mObjects;
explicit ClearVector(std::vector<osg::ref_ptr<osg::Referenced>>&& objects)
: mObjects(std::move(objects)) {}
void doWork() override { mObjects.clear(); }
};
}
void UnrefQueue::flush(SceneUtil::WorkQueue& workQueue)
{
if (mObjects.empty())
return;
// Move only objects to keep allocated storage in mObjects
workQueue.addWorkItem(new ClearVector(std::vector<osg::ref_ptr<osg::Referenced>>(
std::move_iterator(mObjects.begin()), std::move_iterator(mObjects.end()))));
mObjects.clear();
}
}