Something went wrong. Try again.
OpenMW is an open implementation of the Morrowind engine
Something went wrong. Try again.
896 B · 32 lines
C++
123456789101112131415161718192021222324252627282930313233#include "unrefqueue.hpp"
#include <components/sceneutil/workqueue.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(std::make_shared<ClearVector>(std::vector<osg::ref_ptr<osg::Referenced>>( std::move_iterator(mObjects.begin()), std::move_iterator(mObjects.end())))); mObjects.clear(); }}