UiStage.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. #include <AnKi/Renderer/UiStage.h>
  6. #include <AnKi/Renderer/Renderer.h>
  7. #include <AnKi/Renderer/RenderQueue.h>
  8. #include <AnKi/Ui/Font.h>
  9. #include <AnKi/Ui/UiManager.h>
  10. #include <AnKi/Util/Tracer.h>
  11. namespace anki
  12. {
  13. UiStage::UiStage(Renderer* r)
  14. : RendererObject(r)
  15. {
  16. }
  17. UiStage::~UiStage()
  18. {
  19. }
  20. Error UiStage::init(const ConfigSet&)
  21. {
  22. ANKI_CHECK(m_r->getUiManager().newInstance(m_font, "EngineAssets/UbuntuRegular.ttf", Array<U32, 3>{12, 16, 20}));
  23. ANKI_CHECK(m_r->getUiManager().newInstance(m_canvas, m_font, 12, m_r->getWidth(), m_r->getHeight()));
  24. return Error::NONE;
  25. }
  26. void UiStage::draw(U32 width, U32 height, RenderingContext& ctx, CommandBufferPtr& cmdb)
  27. {
  28. // Early exit
  29. if(ctx.m_renderQueue->m_uis.getSize() == 0)
  30. {
  31. return;
  32. }
  33. ANKI_TRACE_SCOPED_EVENT(UI_RENDER);
  34. m_canvas->handleInput();
  35. m_canvas->beginBuilding();
  36. m_canvas->resize(width, height);
  37. for(UiQueueElement& el : ctx.m_renderQueue->m_uis)
  38. {
  39. el.m_drawCallback(m_canvas, el.m_userData);
  40. }
  41. m_canvas->appendToCommandBuffer(cmdb);
  42. // UI messes with the state, restore it
  43. cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ZERO);
  44. cmdb->setBlendOperation(0, BlendOperation::ADD);
  45. cmdb->setCullMode(FaceSelectionBit::BACK);
  46. }
  47. } // end namespace anki