DeveloperConsole.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // Copyright (C) 2009-2022, 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.h>
  7. #include <AnKi/Core/Common.h>
  8. #include <AnKi/Util/List.h>
  9. #include <AnKi/Script/ScriptEnvironment.h>
  10. namespace anki {
  11. /// @addtogroup core
  12. /// @{
  13. /// Developer console UI.
  14. class DeveloperConsole : public UiImmediateModeBuilder
  15. {
  16. public:
  17. DeveloperConsole(UiManager* ui)
  18. : UiImmediateModeBuilder(ui)
  19. {
  20. }
  21. ~DeveloperConsole();
  22. Error init(AllocAlignedCallback allocCb, void* allocCbUserData, ScriptManager* scriptManager);
  23. void build(CanvasPtr ctx) override;
  24. private:
  25. static constexpr U MAX_LOG_ITEMS = 64;
  26. class LogItem : public IntrusiveListEnabled<LogItem>
  27. {
  28. public:
  29. const char* m_file;
  30. const char* m_func;
  31. const char* m_subsystem;
  32. String m_msg;
  33. I32 m_line;
  34. LoggerMessageType m_type;
  35. };
  36. HeapAllocator<U8> m_alloc;
  37. FontPtr m_font;
  38. IntrusiveList<LogItem> m_logItems;
  39. U32 m_logItemCount = 0;
  40. Array<char, 256> m_inputText;
  41. Atomic<U32> m_logItemsTimestamp = {1};
  42. U32 m_logItemsTimestampConsumed = 0;
  43. ScriptEnvironment m_scriptEnv;
  44. void newLogItem(const LoggerMessageInfo& inf);
  45. static void loggerCallback(void* userData, const LoggerMessageInfo& info)
  46. {
  47. static_cast<DeveloperConsole*>(userData)->newLogItem(info);
  48. }
  49. };
  50. /// @}
  51. } // end namespace anki