Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
Divide::SceneGraph Class Referencefinal

#include <SceneGraph.h>

+ Inheritance diagram for Divide::SceneGraph:

Public Member Functions

 SceneGraph (Scene &parentScene)
 
 ~SceneGraph () override
 
void load ()
 
void unload ()
 
const SceneGraphNodegetRoot () const noexcept
 
SceneGraphNodegetRoot () noexcept
 
SceneGraphNodefindNode (const Str< 128 > &name, bool sceneNodeName=false) const
 
SceneGraphNodefindNode (U64 nameHash, bool sceneNodeName=false) const
 
SceneGraphNodefindNode (I64 guid) const
 
void sceneUpdate (U64 deltaTimeUS, SceneState &sceneState)
 Update all nodes. Called from "updateSceneState" from class Scene.
 
bool intersect (const SGNIntersectionParams &params, vector< SGNRayResult > &intersectionsOut) const
 
SceneGraphNodecreateSceneGraphNode (PlatformContext &context, SceneGraph *sceneGraph, const SceneGraphNodeDescriptor &descriptor)
 
void destroySceneGraphNode (SceneGraphNode *&node, bool inPlace=true)
 
void addToDeleteQueue (SceneGraphNode *node, size_t childIdx)
 
bool removeNode (I64 guid)
 
bool removeNode (SceneGraphNode *node)
 
bool removeNodesByType (SceneNodeType nodeType)
 
const vector< SceneGraphNode * > & getNodesByType (SceneNodeType type) const
 
void getNodesByType (std::initializer_list< SceneNodeType > types, vector< SceneGraphNode * > &nodesOut) const
 
size_t getTotalNodeCount () const noexcept
 
void onNetworkSend (U32 frameCount)
 
void postLoad ()
 
bool saveNodeToXML (const SceneGraphNode *node) const
 
bool loadNodeFromXML (const ResourcePath &assetsFile, SceneGraphNode *node) const
 
void saveToXML (const ResourcePath &assetsFile, DELEGATE< void, std::string_view > msgCallback) const
 
void loadFromXML (const ResourcePath &assetsFile)
 
ECSManagerGetECSManager ()
 
const ECSManagerGetECSManager () const
 
ECS::EntityManagerGetEntityManager ()
 
ECS::EntityManagerGetEntityManager () const
 
ECS::ComponentManagerGetComponentManager ()
 
ECS::ComponentManagerGetComponentManager () const
 
bool saveCache (ByteBuffer &outputBuffer) const
 
bool loadCache (ByteBuffer &inputBuffer)
 
ECS::ECSEngineGetECSEngine () noexcept
 
const ECS::ECSEngineGetECSEngine () const noexcept
 
- Public Member Functions inherited from Divide::FrameListener
 FrameListener (const Str< 64 > &name, FrameListenerManager &parent, U32 callOrder)
 Either give it a name.
 
virtual ~FrameListener () override
 
bool operator< (FrameListener &that) const noexcept
 
- Public Member Functions inherited from Divide::GUIDWrapper
 GUIDWrapper () noexcept
 
 GUIDWrapper (const GUIDWrapper &old) noexcept
 
 GUIDWrapper (GUIDWrapper &&old) noexcept
 
virtual ~GUIDWrapper ()=default
 
FORCE_INLINE I64 getGUID () const noexcept
 
GUIDWrapperoperator= (const GUIDWrapper &old)=delete
 
GUIDWrapperoperator= (GUIDWrapper &&other)=delete
 
- Public Member Functions inherited from Divide::SceneComponent
 SceneComponent (Scene &parentScene) noexcept
 
SceneparentScene () noexcept
 
const SceneparentScene () const noexcept
 

Static Public Member Functions

static BoundingSphere GetBounds (const SceneGraphNode *sgn)
 
- Static Public Member Functions inherited from Divide::GUIDWrapper
static I64 generateGUID () noexcept
 

Protected Member Functions

void onNodeMoved (const SceneGraphNode &node)
 
void onNodeDestroy (SceneGraphNode *oldNode)
 
void onNodeAdd (SceneGraphNode *newNode)
 
void onNodeUpdated (const SceneGraphNode &node)
 
void onNodeSpatialChange (const SceneGraphNode &node)
 
bool frameStarted (const FrameEvent &evt) override
 
bool frameEnded (const FrameEvent &evt) override
 frameEnded is called after the buffers have been swapped
 
void checkCollisions (BoundsComponent *bComp)
 
- Protected Member Functions inherited from Divide::FrameListener
void setCallOrder (const U32 order) noexcept
 
virtual bool frameStarted (const FrameEvent &evt)
 
virtual bool framePreRender (const FrameEvent &evt)
 framePreRenderStarted is called when we need to start processing the visual aspect of a scene
 
virtual bool frameSceneRenderStarted (const FrameEvent &evt)
 frameSceneRenderStarted is called right before rendering the scene for the current player starts
 
virtual bool frameSceneRenderEnded (const FrameEvent &evt)
 frameSceneRenderEnded is called immediately after scene rendering for the current player has ended but before any blitting operations
 
virtual bool frameRenderingQueued (const FrameEvent &evt)
 
virtual bool framePostRender (const FrameEvent &evt)
 
virtual bool frameEnded (const FrameEvent &evt)
 frameEnded is called after the buffers have been swapped
 
 PROPERTY_R_IW (bool, enabled, false)
 
 PROPERTY_RW (Str< 64 >, name)
 

Static Protected Member Functions

static void HandleIntersection (const IntersectionRecord &intersection)
 

Private Attributes

ECS::ECSEngine _ecsEngine
 
ECSManager_uptr _ecsManager
 
bool _nodeListChanged = false
 
SceneGraphNode_root = nullptr
 
vector< SceneGraphNode * > _nodeList
 
Mutex _intersectionsLock
 
IntersectionContainer _intersectionsCache
 
std::array< vector< SceneGraphNode * >, to_base(SceneNodeType::COUNT)> _nodesByType
 
Mutex _nodeCreateMutex
 
SharedMutex _nodesByTypeLock
 
SharedMutex _pendingDeletionLock
 
hashMap< SceneGraphNode *, vector< size_t > > _pendingDeletion
 
Mutex _nodeEventLock
 
eastl::fixed_vector< SceneGraphNode *, 1024, true > _nodeEventQueue
 
Mutex _nodeParentChangeLock
 
eastl::fixed_vector< SceneGraphNode *, 256, true > _nodeParentChangeQueue
 

Friends

class Attorney::SceneGraphSGN
 

Additional Inherited Members

- Protected Attributes inherited from Divide::GUIDWrapper
const I64 _guid
 
- Protected Attributes inherited from Divide::SceneComponent
Scene_parentScene
 
- Private Member Functions inherited from Divide::NonCopyable
 NonCopyable (const NonCopyable &)=delete
 
NonCopyableoperator= (const NonCopyable &)=delete
 
 NonCopyable (NonCopyable &&)=default
 
NonCopyableoperator= (NonCopyable &&)=default
 
 NonCopyable ()=default
 
 ~NonCopyable ()=default
 

Detailed Description

Definition at line 61 of file SceneGraph.h.

Constructor & Destructor Documentation

◆ SceneGraph()

Divide::SceneGraph::SceneGraph ( Scene parentScene)
explicit

Definition at line 58 of file SceneGraph.cpp.

◆ ~SceneGraph()

Divide::SceneGraph::~SceneGraph ( )
override

Definition at line 65 of file SceneGraph.cpp.

Member Function Documentation

◆ addToDeleteQueue()

void Divide::SceneGraph::addToDeleteQueue ( SceneGraphNode node,
size_t  childIdx 
)

Definition at line 102 of file SceneGraph.cpp.

◆ checkCollisions()

void Divide::SceneGraph::checkCollisions ( BoundsComponent bComp)
protected

◆ createSceneGraphNode()

SceneGraphNode * Divide::SceneGraph::createSceneGraphNode ( PlatformContext context,
SceneGraph sceneGraph,
const SceneGraphNodeDescriptor descriptor 
)

Definition at line 70 of file SceneGraph.cpp.

◆ destroySceneGraphNode()

void Divide::SceneGraph::destroySceneGraphNode ( SceneGraphNode *&  node,
bool  inPlace = true 
)

Definition at line 448 of file SceneGraph.cpp.

◆ findNode() [1/3]

SceneGraphNode * Divide::SceneGraph::findNode ( const Str< 128 > &  name,
bool  sceneNodeName = false 
) const

Definition at line 503 of file SceneGraph.cpp.

◆ findNode() [2/3]

SceneGraphNode * Divide::SceneGraph::findNode ( I64  guid) const

Definition at line 520 of file SceneGraph.cpp.

◆ findNode() [3/3]

SceneGraphNode * Divide::SceneGraph::findNode ( U64  nameHash,
bool  sceneNodeName = false 
) const

Definition at line 508 of file SceneGraph.cpp.

◆ frameEnded()

bool Divide::SceneGraph::frameEnded ( const FrameEvent evt)
overrideprotectedvirtual

frameEnded is called after the buffers have been swapped

Reimplemented from Divide::FrameListener.

Definition at line 248 of file SceneGraph.cpp.

◆ frameStarted()

bool Divide::SceneGraph::frameStarted ( const FrameEvent evt)
overrideprotectedvirtual

Adapter patern instead of pure interface for the same reason as the Ogre boys pointed out: Implement what you need without filling classes with dummy functions frameStarted is calld at the beggining of a new frame before processing the logic aspect of a scene

Reimplemented from Divide::FrameListener.

Definition at line 228 of file SceneGraph.cpp.

◆ GetBounds()

BoundingSphere Divide::SceneGraph::GetBounds ( const SceneGraphNode sgn)
static

This will return a bounding sphere even for nodes that don't have a BoundsComponent by doing some rough estimations based on the TransformComponent (which all nodes do have)

Definition at line 36 of file SceneGraph.cpp.

◆ GetComponentManager() [1/2]

ECS::ComponentManager * Divide::SceneGraph::GetComponentManager ( )

Definition at line 493 of file SceneGraph.cpp.

◆ GetComponentManager() [2/2]

ECS::ComponentManager * Divide::SceneGraph::GetComponentManager ( ) const

Definition at line 498 of file SceneGraph.cpp.

◆ GetECSEngine() [1/2]

const ECS::ECSEngine & Divide::SceneGraph::GetECSEngine ( ) const
inlinenoexcept

Definition at line 134 of file SceneGraph.h.

◆ GetECSEngine() [2/2]

ECS::ECSEngine & Divide::SceneGraph::GetECSEngine ( )
inlinenoexcept

Definition at line 133 of file SceneGraph.h.

◆ GetECSManager() [1/2]

ECSManager & Divide::SceneGraph::GetECSManager ( )
inline

Definition at line 122 of file SceneGraph.h.

◆ GetECSManager() [2/2]

const ECSManager & Divide::SceneGraph::GetECSManager ( ) const
inline

Definition at line 123 of file SceneGraph.h.

◆ GetEntityManager() [1/2]

ECS::EntityManager * Divide::SceneGraph::GetEntityManager ( )

Definition at line 483 of file SceneGraph.cpp.

◆ GetEntityManager() [2/2]

ECS::EntityManager * Divide::SceneGraph::GetEntityManager ( ) const

Definition at line 488 of file SceneGraph.cpp.

◆ getNodesByType() [1/2]

const vector< SceneGraphNode * > & Divide::SceneGraph::getNodesByType ( SceneNodeType  type) const

Definition at line 477 of file SceneGraph.cpp.

◆ getNodesByType() [2/2]

void Divide::SceneGraph::getNodesByType ( std::initializer_list< SceneNodeType types,
vector< SceneGraphNode * > &  nodesOut 
) const
inline

Definition at line 100 of file SceneGraph.h.

◆ getRoot() [1/2]

const SceneGraphNode * Divide::SceneGraph::getRoot ( ) const
inlinenoexcept

Definition at line 75 of file SceneGraph.h.

◆ getRoot() [2/2]

SceneGraphNode * Divide::SceneGraph::getRoot ( )
inlinenoexcept

Definition at line 76 of file SceneGraph.h.

◆ getTotalNodeCount()

size_t Divide::SceneGraph::getTotalNodeCount ( ) const
noexcept

Definition at line 464 of file SceneGraph.cpp.

◆ HandleIntersection()

void Divide::SceneGraph::HandleIntersection ( const IntersectionRecord intersection)
staticprotected

Definition at line 365 of file SceneGraph.cpp.

◆ intersect()

bool Divide::SceneGraph::intersect ( const SGNIntersectionParams params,
vector< SGNRayResult > &  intersectionsOut 
) const

Definition at line 394 of file SceneGraph.cpp.

◆ load()

void Divide::SceneGraph::load ( )

Definition at line 77 of file SceneGraph.cpp.

◆ loadCache()

bool Divide::SceneGraph::loadCache ( ByteBuffer inputBuffer)

Definition at line 572 of file SceneGraph.cpp.

◆ loadFromXML()

void Divide::SceneGraph::loadFromXML ( const ResourcePath assetsFile)

Definition at line 686 of file SceneGraph.cpp.

◆ loadNodeFromXML()

bool Divide::SceneGraph::loadNodeFromXML ( const ResourcePath assetsFile,
SceneGraphNode node 
) const

Definition at line 756 of file SceneGraph.cpp.

◆ onNetworkSend()

void Divide::SceneGraph::onNetworkSend ( U32  frameCount)

Definition at line 389 of file SceneGraph.cpp.

◆ onNodeAdd()

void Divide::SceneGraph::onNodeAdd ( SceneGraphNode newNode)
protected

Definition at line 190 of file SceneGraph.cpp.

◆ onNodeDestroy()

void Divide::SceneGraph::onNodeDestroy ( SceneGraphNode oldNode)
protected

Definition at line 151 of file SceneGraph.cpp.

◆ onNodeMoved()

void Divide::SceneGraph::onNodeMoved ( const SceneGraphNode node)
protected

Definition at line 145 of file SceneGraph.cpp.

◆ onNodeSpatialChange()

void Divide::SceneGraph::onNodeSpatialChange ( const SceneGraphNode node)
protected

Definition at line 128 of file SceneGraph.cpp.

◆ onNodeUpdated()

void Divide::SceneGraph::onNodeUpdated ( const SceneGraphNode node)
protected

Definition at line 112 of file SceneGraph.cpp.

◆ postLoad()

void Divide::SceneGraph::postLoad ( )

Definition at line 443 of file SceneGraph.cpp.

◆ removeNode() [1/2]

bool Divide::SceneGraph::removeNode ( I64  guid)

Definition at line 204 of file SceneGraph.cpp.

◆ removeNode() [2/2]

bool Divide::SceneGraph::removeNode ( SceneGraphNode node)

Definition at line 209 of file SceneGraph.cpp.

◆ removeNodesByType()

bool Divide::SceneGraph::removeNodesByType ( SceneNodeType  nodeType)

Definition at line 199 of file SceneGraph.cpp.

◆ saveCache()

bool Divide::SceneGraph::saveCache ( ByteBuffer outputBuffer) const

Definition at line 530 of file SceneGraph.cpp.

◆ saveNodeToXML()

bool Divide::SceneGraph::saveNodeToXML ( const SceneGraphNode node) const

Definition at line 750 of file SceneGraph.cpp.

◆ saveToXML()

void Divide::SceneGraph::saveToXML ( const ResourcePath assetsFile,
DELEGATE< void, std::string_view >  msgCallback 
) const

Definition at line 647 of file SceneGraph.cpp.

◆ sceneUpdate()

void Divide::SceneGraph::sceneUpdate ( U64  deltaTimeUS,
SceneState sceneState 
)

Update all nodes. Called from "updateSceneState" from class Scene.

Definition at line 282 of file SceneGraph.cpp.

◆ unload()

void Divide::SceneGraph::unload ( )

Definition at line 93 of file SceneGraph.cpp.

Friends And Related Function Documentation

◆ Attorney::SceneGraphSGN

friend class Attorney::SceneGraphSGN
friend

Definition at line 66 of file SceneGraph.h.

Member Data Documentation

◆ _ecsEngine

ECS::ECSEngine Divide::SceneGraph::_ecsEngine
private

Definition at line 156 of file SceneGraph.h.

◆ _ecsManager

ECSManager_uptr Divide::SceneGraph::_ecsManager
private

Definition at line 157 of file SceneGraph.h.

◆ _intersectionsCache

IntersectionContainer Divide::SceneGraph::_intersectionsCache
private

Definition at line 163 of file SceneGraph.h.

◆ _intersectionsLock

Mutex Divide::SceneGraph::_intersectionsLock
private

Definition at line 162 of file SceneGraph.h.

◆ _nodeCreateMutex

Mutex Divide::SceneGraph::_nodeCreateMutex
mutableprivate

Definition at line 166 of file SceneGraph.h.

◆ _nodeEventLock

Mutex Divide::SceneGraph::_nodeEventLock
mutableprivate

Definition at line 171 of file SceneGraph.h.

◆ _nodeEventQueue

eastl::fixed_vector<SceneGraphNode*, 1024, true> Divide::SceneGraph::_nodeEventQueue
private

Definition at line 172 of file SceneGraph.h.

◆ _nodeList

vector<SceneGraphNode*> Divide::SceneGraph::_nodeList
private

Definition at line 161 of file SceneGraph.h.

◆ _nodeListChanged

bool Divide::SceneGraph::_nodeListChanged = false
private

Definition at line 158 of file SceneGraph.h.

◆ _nodeParentChangeLock

Mutex Divide::SceneGraph::_nodeParentChangeLock
mutableprivate

Definition at line 174 of file SceneGraph.h.

◆ _nodeParentChangeQueue

eastl::fixed_vector<SceneGraphNode*, 256, true> Divide::SceneGraph::_nodeParentChangeQueue
private

Definition at line 175 of file SceneGraph.h.

◆ _nodesByType

std::array<vector<SceneGraphNode*>, to_base(SceneNodeType::COUNT)> Divide::SceneGraph::_nodesByType
private

Definition at line 164 of file SceneGraph.h.

◆ _nodesByTypeLock

SharedMutex Divide::SceneGraph::_nodesByTypeLock
mutableprivate

Definition at line 167 of file SceneGraph.h.

◆ _pendingDeletion

hashMap<SceneGraphNode*, vector<size_t> > Divide::SceneGraph::_pendingDeletion
private

Definition at line 169 of file SceneGraph.h.

◆ _pendingDeletionLock

SharedMutex Divide::SceneGraph::_pendingDeletionLock
mutableprivate

Definition at line 168 of file SceneGraph.h.

◆ _root

SceneGraphNode* Divide::SceneGraph::_root = nullptr
private

Definition at line 160 of file SceneGraph.h.


The documentation for this class was generated from the following files: