PeriDyno 1.0.0
Loading...
Searching...
No Matches
SceneGraphFactory.cpp
Go to the documentation of this file.
1#include "SceneGraphFactory.h"
2
3namespace dyno
4{
5 std::atomic<SceneGraphFactory*> SceneGraphFactory::pInstance;
7
8 //Thread-safe singleton mode
10 {
11 SceneGraphFactory* ins = pInstance.load(std::memory_order_acquire);
12 if (!ins) {
13 std::lock_guard<std::mutex> tLock(mMutex);
14 ins = pInstance.load(std::memory_order_relaxed);
15 if (!ins) {
16 ins = new SceneGraphFactory();
17 pInstance.store(ins, std::memory_order_release);
18 }
19 }
20
21 return ins;
22 }
23
24 std::shared_ptr<SceneGraph> SceneGraphFactory::active()
25 {
26 //If no SceneGraph is created, return an empty one.
27 if (mSceneGraphs.empty())
28 this->createNewScene();
29
30 return mSceneGraphs.top();
31 }
32
33 std::shared_ptr<SceneGraph> SceneGraphFactory::createNewScene()
34 {
35 mSceneGraphs.push(std::make_shared<SceneGraph>());
36
37 return mSceneGraphs.top();
38 }
39
40 std::shared_ptr<SceneGraph> SceneGraphFactory::createDefaultScene()
41 {
42 if (mDefaultCreator != nullptr)
43 return mDefaultCreator();
44
45 return std::make_shared<SceneGraph>();
46 }
47
52
53 void SceneGraphFactory::pushScene(std::shared_ptr<SceneGraph> scn)
54 {
55 mSceneGraphs.push(scn);
56 }
57
59 {
60 mSceneGraphs.pop();
61 }
62
64 {
65 while (!mSceneGraphs.empty())
66 {
67 mSceneGraphs.pop();
68 }
69 }
70
71}
static std::atomic< SceneGraphFactory * > pInstance
std::shared_ptr< SceneGraph > createNewScene()
Create a new SceneGraph.
std::shared_ptr< SceneGraph > createDefaultScene()
static SceneGraphFactory * instance()
void pushScene(std::shared_ptr< SceneGraph > scn)
std::stack< std::shared_ptr< SceneGraph > > mSceneGraphs
SceneGraphCreator mDefaultCreator
void setDefaultCreator(SceneGraphCreator creator)
std::shared_ptr< SceneGraph > active()
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
std::function< std::shared_ptr< SceneGraph >()> SceneGraphCreator