SceneNode.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. {
  9. SceneNode::SceneNode(SceneGraph* scene, CString name)
  10. : m_scene(scene)
  11. , m_uuid(scene->getNewUuid())
  12. {
  13. if(name)
  14. {
  15. m_name.create(getAllocator(), name);
  16. }
  17. }
  18. SceneNode::~SceneNode()
  19. {
  20. auto alloc = getAllocator();
  21. auto it = m_components.getBegin();
  22. auto end = m_components.getEnd();
  23. for(; it != end; ++it)
  24. {
  25. SceneComponent* comp = *it;
  26. alloc.deleteInstance(comp);
  27. }
  28. Base::destroy(alloc);
  29. m_name.destroy(alloc);
  30. m_components.destroy(alloc);
  31. }
  32. void SceneNode::setMarkedForDeletion()
  33. {
  34. // Mark for deletion only when it's not already marked because we don't want to increase the counter again
  35. if(!getMarkedForDeletion())
  36. {
  37. m_markedForDeletion = true;
  38. m_scene->increaseObjectsMarkedForDeletion();
  39. }
  40. Error err = visitChildren([](SceneNode& obj) -> Error {
  41. obj.setMarkedForDeletion();
  42. return Error::NONE;
  43. });
  44. (void)err;
  45. }
  46. Timestamp SceneNode::getGlobalTimestamp() const
  47. {
  48. return m_scene->getGlobalTimestamp();
  49. }
  50. SceneAllocator<U8> SceneNode::getAllocator() const
  51. {
  52. ANKI_ASSERT(m_scene);
  53. return m_scene->getAllocator();
  54. }
  55. SceneFrameAllocator<U8> SceneNode::getFrameAllocator() const
  56. {
  57. ANKI_ASSERT(m_scene);
  58. return m_scene->getFrameAllocator();
  59. }
  60. ResourceManager& SceneNode::getResourceManager()
  61. {
  62. return m_scene->getResourceManager();
  63. }
  64. } // end namespace anki