mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-08 09:37:53 +00:00
4dd9386c4f
Fixes compile error encountered on OSX 10.9 with g++ sophie:build pineapple$ g++ --version Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn) Target: x86_64-apple-darwin13.4.0 Thread model: posix The compilation error: [ 24%] Building CXX object apps/openmw/CMakeFiles/openmw.dir/mwrender/renderingmanager.cpp.o In file included from /Users/pineapple/git/openmw/apps/openmw/mwrender/renderingmanager.cpp:1: In file included from /Users/pineapple/git/openmw/apps/openmw/mwrender/renderingmanager.hpp:4: /Users/pineapple/git/openmw/openmw-deps/include/osg/ref_ptr:35:36: error: member access into incomplete type 'SceneUtil::UnrefWorkItem' ~ref_ptr() { if (_ptr) _ptr->unref(); _ptr = 0; } ^ /Users/pineapple/git/openmw/./components/sceneutil/unrefqueue.hpp:14:11: note: in instantiation of member function 'osg::ref_ptr<SceneUtil::UnrefWorkItem>::~ref_ptr' requested here class UnrefQueue : public osg::Referenced ^ /Users/pineapple/git/openmw/./components/sceneutil/unrefqueue.hpp:10:11: note: forward declaration of 'SceneUtil::UnrefWorkItem' class UnrefWorkItem;
45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
#ifndef OPENMW_COMPONENTS_UNREFQUEUE_H
|
|
#define OPENMW_COMPONENTS_UNREFQUEUE_H
|
|
|
|
#include <deque>
|
|
|
|
#include <osg/ref_ptr>
|
|
#include <osg/Referenced>
|
|
|
|
#include <components/sceneutil/workqueue.hpp>
|
|
|
|
namespace SceneUtil
|
|
{
|
|
class WorkQueue;
|
|
|
|
class UnrefWorkItem : public SceneUtil::WorkItem
|
|
{
|
|
public:
|
|
std::deque<osg::ref_ptr<const osg::Referenced> > mObjects;
|
|
virtual void doWork();
|
|
};
|
|
|
|
/// @brief Handles unreferencing of objects through the WorkQueue. Typical use scenario
|
|
/// would be the main thread pushing objects that are no longer needed, and the background thread deleting them.
|
|
class UnrefQueue : public osg::Referenced
|
|
{
|
|
public:
|
|
UnrefQueue();
|
|
|
|
/// Adds an object to the list of objects to be unreferenced. Call from the main thread.
|
|
void push(const osg::Referenced* obj);
|
|
|
|
/// Adds a WorkItem to the given WorkQueue that will clear the list of objects in a worker thread, thus unreferencing them.
|
|
/// Call from the main thread.
|
|
void flush(SceneUtil::WorkQueue* workQueue);
|
|
|
|
unsigned int getNumItems() const;
|
|
|
|
private:
|
|
osg::ref_ptr<UnrefWorkItem> mWorkItem;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|