VisibleObjectContext.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <Atom/RPI.Public/VisibleObjectContext.h>
  9. #include <Atom/RPI.Reflect/Base.h>
  10. #include <AzCore/Debug/Profiler.h>
  11. #include <AzCore/std/sort.h>
  12. AZ_DECLARE_BUDGET(RPI);
  13. namespace AZ
  14. {
  15. namespace RPI
  16. {
  17. void VisibleObjectContext::Shutdown()
  18. {
  19. m_visibleObjectListContext.Clear();
  20. m_finalizedVisibleObjectList.clear();
  21. }
  22. void VisibleObjectContext::AddVisibleObject(const void* userData, float depth)
  23. {
  24. if (userData)
  25. {
  26. VisibleObjectList& visibleObjectList = m_visibleObjectListContext.GetStorage();
  27. VisibleObjectProperties visibleObject;
  28. visibleObject.m_userData = userData;
  29. visibleObject.m_depth = depth;
  30. visibleObjectList.push_back(visibleObject);
  31. }
  32. else
  33. {
  34. AZ_Error(
  35. "VisibleObjectContext",
  36. false,
  37. "Null userData was added to a VisibleObjectContext. Visible object will be ignored.");
  38. }
  39. }
  40. void VisibleObjectContext::FinalizeLists()
  41. {
  42. AZ_PROFILE_SCOPE(RPI, "VisibleObjectContext: FinalizeLists");
  43. m_finalizedVisibleObjectList.clear();
  44. // Reserve enough memory for all the visible objects
  45. size_t objectCount = 0;
  46. m_visibleObjectListContext.ForEach(
  47. [&objectCount](const VisibleObjectList& visibleObjectList)
  48. {
  49. objectCount += visibleObjectList.size();
  50. });
  51. m_finalizedVisibleObjectList.reserve(objectCount);
  52. // Concatenate all the per-thread lists into a single list
  53. m_visibleObjectListContext.ForEach(
  54. [this](VisibleObjectList& visibleObjectList)
  55. {
  56. m_finalizedVisibleObjectList.insert(m_finalizedVisibleObjectList.end(), visibleObjectList.begin(), visibleObjectList.end());
  57. visibleObjectList.clear();
  58. });
  59. }
  60. VisibleObjectListView VisibleObjectContext::GetList() const
  61. {
  62. return m_finalizedVisibleObjectList;
  63. }
  64. }
  65. }