UiManager.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Copyright (C) 2009-present, 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/Ui/UiManager.h>
  6. #include <AnKi/Ui/UiCanvas.h>
  7. namespace anki {
  8. thread_local ImGuiContext* g_imguiTlsCtx = nullptr;
  9. UiManager::UiManager()
  10. {
  11. }
  12. UiManager::~UiManager()
  13. {
  14. ImGui::SetAllocatorFunctions(nullptr, nullptr, nullptr);
  15. UiMemoryPool::freeSingleton();
  16. }
  17. Error UiManager::init(AllocAlignedCallback allocCallback, void* allocCallbackData)
  18. {
  19. UiMemoryPool::allocateSingleton(allocCallback, allocCallbackData);
  20. auto imguiAllocCallback = [](size_t size, [[maybe_unused]] void* userData) -> void* {
  21. return UiMemoryPool::getSingleton().allocate(size, 16);
  22. };
  23. auto imguiFreeCallback = [](void* ptr, [[maybe_unused]] void* userData) -> void {
  24. if(ptr)
  25. {
  26. UiMemoryPool::getSingleton().free(ptr);
  27. }
  28. };
  29. ImGui::SetAllocatorFunctions(imguiAllocCallback, imguiFreeCallback, nullptr);
  30. return Error::kNone;
  31. }
  32. Error UiManager::newCanvas(U32 width, U32 height, UiCanvasPtr& canvas)
  33. {
  34. UiCanvas* pCanvas = newInstance<UiCanvas>(UiMemoryPool::getSingleton());
  35. if(pCanvas->init(UVec2(width, height)))
  36. {
  37. ANKI_UI_LOGE("Unable to create canvas");
  38. deleteInstance(UiMemoryPool::getSingleton(), pCanvas);
  39. return Error::kFunctionFailed;
  40. }
  41. canvas.reset(pCanvas);
  42. return Error::kNone;
  43. }
  44. } // end namespace anki