![]() |
Divide Framework 0.1
A free and open-source 3D Framework under heavy development
|
#include <SceneGraph.h>
Public Member Functions | |
SceneGraph (Scene &parentScene) | |
~SceneGraph () override | |
void | load () |
void | unload () |
const SceneGraphNode * | getRoot () const noexcept |
SceneGraphNode * | getRoot () noexcept |
SceneGraphNode * | findNode (const Str< 128 > &name, bool sceneNodeName=false) const |
SceneGraphNode * | findNode (U64 nameHash, bool sceneNodeName=false) const |
SceneGraphNode * | findNode (I64 guid) const |
void | sceneUpdate (U64 deltaTimeUS, SceneState &sceneState) |
Update all nodes. Called from "updateSceneState" from class Scene. | |
bool | intersect (const SGNIntersectionParams ¶ms, vector< SGNRayResult > &intersectionsOut) const |
SceneGraphNode * | createSceneGraphNode (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) |
ECSManager & | GetECSManager () |
const ECSManager & | GetECSManager () const |
ECS::EntityManager * | GetEntityManager () |
ECS::EntityManager * | GetEntityManager () const |
ECS::ComponentManager * | GetComponentManager () |
ECS::ComponentManager * | GetComponentManager () const |
bool | saveCache (ByteBuffer &outputBuffer) const |
bool | loadCache (ByteBuffer &inputBuffer) |
ECS::ECSEngine & | GetECSEngine () noexcept |
const ECS::ECSEngine & | GetECSEngine () const noexcept |
![]() | |
FrameListener (const Str< 64 > &name, FrameListenerManager &parent, U32 callOrder) | |
Either give it a name. | |
virtual | ~FrameListener () override |
bool | operator< (FrameListener &that) const noexcept |
![]() | |
GUIDWrapper () noexcept | |
GUIDWrapper (const GUIDWrapper &old) noexcept | |
GUIDWrapper (GUIDWrapper &&old) noexcept | |
virtual | ~GUIDWrapper ()=default |
FORCE_INLINE I64 | getGUID () const noexcept |
GUIDWrapper & | operator= (const GUIDWrapper &old)=delete |
GUIDWrapper & | operator= (GUIDWrapper &&other)=delete |
![]() | |
SceneComponent (Scene &parentScene) noexcept | |
Scene & | parentScene () noexcept |
const Scene & | parentScene () const noexcept |
Static Public Member Functions | |
static BoundingSphere | GetBounds (const SceneGraphNode *sgn) |
![]() | |
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) |
![]() | |
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 | |
![]() | |
const I64 | _guid |
![]() | |
Scene & | _parentScene |
![]() | |
NonCopyable (const NonCopyable &)=delete | |
NonCopyable & | operator= (const NonCopyable &)=delete |
NonCopyable (NonCopyable &&)=default | |
NonCopyable & | operator= (NonCopyable &&)=default |
NonCopyable ()=default | |
~NonCopyable ()=default | |
Definition at line 61 of file SceneGraph.h.
|
explicit |
Definition at line 58 of file SceneGraph.cpp.
|
override |
Definition at line 65 of file SceneGraph.cpp.
void Divide::SceneGraph::addToDeleteQueue | ( | SceneGraphNode * | node, |
size_t | childIdx | ||
) |
Definition at line 102 of file SceneGraph.cpp.
|
protected |
SceneGraphNode * Divide::SceneGraph::createSceneGraphNode | ( | PlatformContext & | context, |
SceneGraph * | sceneGraph, | ||
const SceneGraphNodeDescriptor & | descriptor | ||
) |
Definition at line 70 of file SceneGraph.cpp.
void Divide::SceneGraph::destroySceneGraphNode | ( | SceneGraphNode *& | node, |
bool | inPlace = true |
||
) |
Definition at line 448 of file SceneGraph.cpp.
SceneGraphNode * Divide::SceneGraph::findNode | ( | const Str< 128 > & | name, |
bool | sceneNodeName = false |
||
) | const |
Definition at line 503 of file SceneGraph.cpp.
SceneGraphNode * Divide::SceneGraph::findNode | ( | I64 | guid | ) | const |
Definition at line 520 of file SceneGraph.cpp.
SceneGraphNode * Divide::SceneGraph::findNode | ( | U64 | nameHash, |
bool | sceneNodeName = false |
||
) | const |
Definition at line 508 of file SceneGraph.cpp.
|
overrideprotectedvirtual |
frameEnded is called after the buffers have been swapped
Reimplemented from Divide::FrameListener.
Definition at line 248 of file SceneGraph.cpp.
|
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.
|
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.
ECS::ComponentManager * Divide::SceneGraph::GetComponentManager | ( | ) |
Definition at line 493 of file SceneGraph.cpp.
ECS::ComponentManager * Divide::SceneGraph::GetComponentManager | ( | ) | const |
Definition at line 498 of file SceneGraph.cpp.
|
inlinenoexcept |
Definition at line 134 of file SceneGraph.h.
|
inlinenoexcept |
Definition at line 133 of file SceneGraph.h.
|
inline |
Definition at line 122 of file SceneGraph.h.
|
inline |
Definition at line 123 of file SceneGraph.h.
ECS::EntityManager * Divide::SceneGraph::GetEntityManager | ( | ) |
Definition at line 483 of file SceneGraph.cpp.
ECS::EntityManager * Divide::SceneGraph::GetEntityManager | ( | ) | const |
Definition at line 488 of file SceneGraph.cpp.
const vector< SceneGraphNode * > & Divide::SceneGraph::getNodesByType | ( | SceneNodeType | type | ) | const |
Definition at line 477 of file SceneGraph.cpp.
|
inline |
Definition at line 100 of file SceneGraph.h.
|
inlinenoexcept |
Definition at line 75 of file SceneGraph.h.
|
inlinenoexcept |
Definition at line 76 of file SceneGraph.h.
|
noexcept |
Definition at line 464 of file SceneGraph.cpp.
|
staticprotected |
Definition at line 365 of file SceneGraph.cpp.
bool Divide::SceneGraph::intersect | ( | const SGNIntersectionParams & | params, |
vector< SGNRayResult > & | intersectionsOut | ||
) | const |
Definition at line 394 of file SceneGraph.cpp.
void Divide::SceneGraph::load | ( | ) |
Definition at line 77 of file SceneGraph.cpp.
bool Divide::SceneGraph::loadCache | ( | ByteBuffer & | inputBuffer | ) |
Definition at line 572 of file SceneGraph.cpp.
void Divide::SceneGraph::loadFromXML | ( | const ResourcePath & | assetsFile | ) |
Definition at line 686 of file SceneGraph.cpp.
bool Divide::SceneGraph::loadNodeFromXML | ( | const ResourcePath & | assetsFile, |
SceneGraphNode * | node | ||
) | const |
Definition at line 756 of file SceneGraph.cpp.
void Divide::SceneGraph::onNetworkSend | ( | U32 | frameCount | ) |
Definition at line 389 of file SceneGraph.cpp.
|
protected |
Definition at line 190 of file SceneGraph.cpp.
|
protected |
Definition at line 151 of file SceneGraph.cpp.
|
protected |
Definition at line 145 of file SceneGraph.cpp.
|
protected |
Definition at line 128 of file SceneGraph.cpp.
|
protected |
Definition at line 112 of file SceneGraph.cpp.
void Divide::SceneGraph::postLoad | ( | ) |
Definition at line 443 of file SceneGraph.cpp.
bool Divide::SceneGraph::removeNode | ( | I64 | guid | ) |
Definition at line 204 of file SceneGraph.cpp.
bool Divide::SceneGraph::removeNode | ( | SceneGraphNode * | node | ) |
Definition at line 209 of file SceneGraph.cpp.
bool Divide::SceneGraph::removeNodesByType | ( | SceneNodeType | nodeType | ) |
Definition at line 199 of file SceneGraph.cpp.
bool Divide::SceneGraph::saveCache | ( | ByteBuffer & | outputBuffer | ) | const |
Definition at line 530 of file SceneGraph.cpp.
bool Divide::SceneGraph::saveNodeToXML | ( | const SceneGraphNode * | node | ) | const |
Definition at line 750 of file SceneGraph.cpp.
void Divide::SceneGraph::saveToXML | ( | const ResourcePath & | assetsFile, |
DELEGATE< void, std::string_view > | msgCallback | ||
) | const |
Definition at line 647 of file SceneGraph.cpp.
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.
void Divide::SceneGraph::unload | ( | ) |
Definition at line 93 of file SceneGraph.cpp.
|
friend |
Definition at line 66 of file SceneGraph.h.
|
private |
Definition at line 156 of file SceneGraph.h.
|
private |
Definition at line 157 of file SceneGraph.h.
|
private |
Definition at line 163 of file SceneGraph.h.
|
private |
Definition at line 162 of file SceneGraph.h.
|
mutableprivate |
Definition at line 166 of file SceneGraph.h.
|
mutableprivate |
Definition at line 171 of file SceneGraph.h.
|
private |
Definition at line 172 of file SceneGraph.h.
|
private |
Definition at line 161 of file SceneGraph.h.
|
private |
Definition at line 158 of file SceneGraph.h.
|
mutableprivate |
Definition at line 174 of file SceneGraph.h.
|
private |
Definition at line 175 of file SceneGraph.h.
|
private |
Definition at line 164 of file SceneGraph.h.
|
mutableprivate |
Definition at line 167 of file SceneGraph.h.
|
private |
Definition at line 169 of file SceneGraph.h.
|
mutableprivate |
Definition at line 168 of file SceneGraph.h.
|
private |
Definition at line 160 of file SceneGraph.h.