SceneNode.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <AnKi/Scene/SceneNode.h>
  6. #include <AnKi/Scene/SceneGraph.h>
  7. namespace anki {
  8. SceneNode::SceneNode(SceneGraph* scene, CString name)
  9. : m_scene(scene)
  10. , m_uuid(scene->getNewUuid())
  11. {
  12. if(name)
  13. {
  14. m_name.create(getAllocator(), name);
  15. }
  16. }
  17. SceneNode::~SceneNode()
  18. {
  19. auto alloc = getAllocator();
  20. auto it = m_components.getBegin();
  21. auto end = m_components.getEnd();
  22. for(; it != end; ++it)
  23. {
  24. SceneComponent* comp = *it;
  25. alloc.deleteInstance(comp);
  26. }
  27. Base::destroy(alloc);
  28. m_name.destroy(alloc);
  29. m_components.destroy(alloc);
  30. }
  31. void SceneNode::setMarkedForDeletion()
  32. {
  33. // Mark for deletion only when it's not already marked because we don't want to increase the counter again
  34. if(!getMarkedForDeletion())
  35. {
  36. m_markedForDeletion = true;
  37. m_scene->increaseObjectsMarkedForDeletion();
  38. }
  39. Error err = visitChildren([](SceneNode& obj) -> Error {
  40. obj.setMarkedForDeletion();
  41. return Error::NONE;
  42. });
  43. (void)err;
  44. }
  45. Timestamp SceneNode::getGlobalTimestamp() const
  46. {
  47. return m_scene->getGlobalTimestamp();
  48. }
  49. SceneAllocator<U8> SceneNode::getAllocator() const
  50. {
  51. ANKI_ASSERT(m_scene);
  52. return m_scene->getAllocator();
  53. }
  54. SceneFrameAllocator<U8> SceneNode::getFrameAllocator() const
  55. {
  56. ANKI_ASSERT(m_scene);
  57. return m_scene->getFrameAllocator();
  58. }
  59. ResourceManager& SceneNode::getResourceManager()
  60. {
  61. return m_scene->getResourceManager();
  62. }
  63. } // end namespace anki