| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
- // All rights reserved.
- // Code licensed under the BSD License.
- // http://www.anki3d.org/LICENSE
- #pragma once
- #include <AnKi/Ui/UiObject.h>
- #include <AnKi/Gr/CommandBuffer.h>
- #include <AnKi/Resource/ShaderProgramResource.h>
- namespace anki {
- /// @addtogroup ui
- /// @{
- /// UI canvas.
- class Canvas : public UiObject
- {
- public:
- Canvas(UiManager* manager);
- virtual ~Canvas();
- ANKI_USE_RESULT Error init(FontPtr font, U32 fontHeight, U32 width, U32 height);
- const FontPtr& getDefaultFont() const
- {
- return m_font;
- }
- /// Resize canvas.
- void resize(U32 width, U32 height)
- {
- ANKI_ASSERT(width > 0 && height > 0);
- m_width = width;
- m_height = height;
- }
- U32 getWidth() const
- {
- return m_width;
- }
- U32 getHeight() const
- {
- return m_height;
- }
- /// @name building commands. The order matters.
- /// @{
- /// Handle input.
- virtual void handleInput();
- /// Begin building the UI.
- void beginBuilding();
- void pushFont(const FontPtr& font, U32 fontHeight);
- void popFont()
- {
- ImGui::PopFont();
- }
- /// Override the default program with a user defined one.
- void setShaderProgram(ShaderProgramPtr program, const void* extraPushConstants, U32 extraPushConstantSize);
- /// Undo what setShaderProgram() did.
- void clearShaderProgram()
- {
- setShaderProgram(ShaderProgramPtr(), nullptr, 0);
- }
- void appendToCommandBuffer(CommandBufferPtr cmdb);
- /// @}
- private:
- class CustomCommand;
- class DrawingState;
- FontPtr m_font;
- U32 m_dfltFontHeight = 0;
- ImGuiContext* m_imCtx = nullptr;
- U32 m_width;
- U32 m_height;
- enum ShaderType
- {
- NO_TEX,
- RGBA_TEX,
- SHADER_COUNT
- };
- ShaderProgramResourcePtr m_prog;
- Array<ShaderProgramPtr, SHADER_COUNT> m_grProgs;
- SamplerPtr m_linearLinearRepeatSampler;
- SamplerPtr m_nearestNearestRepeatSampler;
- StackAllocator<U8> m_stackAlloc;
- List<IntrusivePtr<UiObject>> m_references;
- void appendToCommandBufferInternal(CommandBufferPtr& cmdb);
- };
- /// @}
- } // end namespace anki
|