UiStage.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Copyright (C) 2009-2020, 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, "engine_data/UbuntuRegular.ttf",
  23. std::initializer_list<U32>{12, 16, 20}));
  24. ANKI_CHECK(m_r->getUiManager().newInstance(m_canvas, m_font, 12, m_r->getWidth(), m_r->getHeight()));
  25. return Error::NONE;
  26. }
  27. void UiStage::draw(U32 width, U32 height, RenderingContext& ctx, CommandBufferPtr& cmdb)
  28. {
  29. // Early exit
  30. if(ctx.m_renderQueue->m_uis.getSize() == 0)
  31. {
  32. return;
  33. }
  34. ANKI_TRACE_SCOPED_EVENT(UI_RENDER);
  35. m_canvas->handleInput();
  36. m_canvas->beginBuilding();
  37. m_canvas->resize(width, height);
  38. for(UiQueueElement& el : ctx.m_renderQueue->m_uis)
  39. {
  40. el.m_drawCallback(m_canvas, el.m_userData);
  41. }
  42. m_canvas->appendToCommandBuffer(cmdb);
  43. // UI messes with the state, restore it
  44. cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ZERO);
  45. cmdb->setBlendOperation(0, BlendOperation::ADD);
  46. cmdb->setCullMode(FaceSelectionBit::BACK);
  47. }
  48. } // end namespace anki