Canvas.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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/UiObject.h>
  7. #include <AnKi/Gr/CommandBuffer.h>
  8. #include <AnKi/Resource/ShaderProgramResource.h>
  9. namespace anki {
  10. /// @addtogroup ui
  11. /// @{
  12. /// UI canvas.
  13. class Canvas : public UiObject
  14. {
  15. public:
  16. Canvas(UiManager* manager);
  17. virtual ~Canvas();
  18. ANKI_USE_RESULT Error init(FontPtr font, U32 fontHeight, U32 width, U32 height);
  19. const FontPtr& getDefaultFont() const
  20. {
  21. return m_font;
  22. }
  23. /// Resize canvas.
  24. void resize(U32 width, U32 height)
  25. {
  26. ANKI_ASSERT(width > 0 && height > 0);
  27. m_width = width;
  28. m_height = height;
  29. }
  30. U32 getWidth() const
  31. {
  32. return m_width;
  33. }
  34. U32 getHeight() const
  35. {
  36. return m_height;
  37. }
  38. /// @name building commands. The order matters.
  39. /// @{
  40. /// Handle input.
  41. virtual void handleInput();
  42. /// Begin building the UI.
  43. void beginBuilding();
  44. void pushFont(const FontPtr& font, U32 fontHeight);
  45. void popFont()
  46. {
  47. ImGui::PopFont();
  48. }
  49. /// Override the default program with a user defined one.
  50. void setShaderProgram(ShaderProgramPtr program, const void* extraPushConstants, U32 extraPushConstantSize);
  51. /// Undo what setShaderProgram() did.
  52. void clearShaderProgram()
  53. {
  54. setShaderProgram(ShaderProgramPtr(), nullptr, 0);
  55. }
  56. void appendToCommandBuffer(CommandBufferPtr cmdb);
  57. /// @}
  58. private:
  59. class CustomCommand;
  60. class DrawingState;
  61. FontPtr m_font;
  62. U32 m_dfltFontHeight = 0;
  63. ImGuiContext* m_imCtx = nullptr;
  64. U32 m_width;
  65. U32 m_height;
  66. enum ShaderType
  67. {
  68. NO_TEX,
  69. RGBA_TEX,
  70. SHADER_COUNT
  71. };
  72. ShaderProgramResourcePtr m_prog;
  73. Array<ShaderProgramPtr, SHADER_COUNT> m_grProgs;
  74. SamplerPtr m_linearLinearRepeatSampler;
  75. SamplerPtr m_nearestNearestRepeatSampler;
  76. StackAllocator<U8> m_stackAlloc;
  77. List<IntrusivePtr<UiObject>> m_references;
  78. void appendToCommandBufferInternal(CommandBufferPtr& cmdb);
  79. };
  80. /// @}
  81. } // end namespace anki