UiManager.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. #pragma once
  6. #include <AnKi/Ui/Common.h>
  7. namespace anki {
  8. // Forward
  9. class ResourceManager;
  10. class GrManager;
  11. class StagingGpuMemoryManager;
  12. class Input;
  13. /// @addtogroup ui
  14. /// @{
  15. /// UI manager.
  16. class UiManager
  17. {
  18. public:
  19. UiManager();
  20. ~UiManager();
  21. ANKI_USE_RESULT Error init(AllocAlignedCallback allocCallback, void* allocCallbackUserData,
  22. ResourceManager* resources, GrManager* gr, StagingGpuMemoryManager* gpuMem,
  23. Input* input);
  24. UiAllocator getAllocator() const
  25. {
  26. return m_alloc;
  27. }
  28. ResourceManager& getResourceManager()
  29. {
  30. ANKI_ASSERT(m_resources);
  31. return *m_resources;
  32. }
  33. GrManager& getGrManager()
  34. {
  35. ANKI_ASSERT(m_gr);
  36. return *m_gr;
  37. }
  38. StagingGpuMemoryManager& getStagingGpuMemoryManager()
  39. {
  40. ANKI_ASSERT(m_gpuMem);
  41. return *m_gpuMem;
  42. }
  43. const Input& getInput() const
  44. {
  45. ANKI_ASSERT(m_input);
  46. return *m_input;
  47. }
  48. /// Create a new UI object.
  49. template<typename T, typename Y, typename... Args>
  50. ANKI_USE_RESULT Error newInstance(IntrusivePtr<Y>& ptr, Args&&... args)
  51. {
  52. T* p = m_alloc.newInstance<T>(this);
  53. ptr.reset(static_cast<Y*>(p));
  54. return p->init(args...);
  55. }
  56. /// Create a new UI object.
  57. template<typename T, typename... Args>
  58. ANKI_USE_RESULT Error newInstance(IntrusivePtr<T>& ptr, Args&&... args)
  59. {
  60. ptr.reset(m_alloc.newInstance<T>(this));
  61. return ptr->init(args...);
  62. }
  63. private:
  64. UiAllocator m_alloc;
  65. ResourceManager* m_resources = nullptr;
  66. GrManager* m_gr = nullptr;
  67. StagingGpuMemoryManager* m_gpuMem = nullptr;
  68. Input* m_input = nullptr;
  69. };
  70. /// @}
  71. } // end namespace anki