UiInterfaceImpl.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Copyright (C) 2009-2016, Panagiotis Christopoulos Charitos.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <anki/ui/UiInterface.h>
  7. #include <anki/Gr.h>
  8. #include <anki/resource/ShaderResource.h>
  9. #include <anki/resource/TextureResource.h>
  10. namespace anki
  11. {
  12. // Forward
  13. class GrManager;
  14. struct Vertex;
  15. /// @addtogroup ui
  16. /// @{
  17. /// Implements UiImage.
  18. class UiImageImpl : public UiImage
  19. {
  20. public:
  21. UiImageImpl(UiInterface* i)
  22. : UiImage(i)
  23. {
  24. }
  25. TextureResourcePtr m_resource;
  26. TexturePtr m_texture;
  27. };
  28. /// Implements UiInterface.
  29. class UiInterfaceImpl final : public UiInterface
  30. {
  31. public:
  32. UiInterfaceImpl(UiAllocator alloc);
  33. ~UiInterfaceImpl();
  34. ANKI_USE_RESULT Error init(GrManager* gr, ResourceManager* rc);
  35. ANKI_USE_RESULT Error loadImage(
  36. const CString& filename, IntrusivePtr<UiImage>& img) override;
  37. ANKI_USE_RESULT Error createR8Image(const SArray<U8>& data,
  38. const UVec2& size,
  39. IntrusivePtr<UiImage>& img) override;
  40. ANKI_USE_RESULT Error readFile(
  41. const CString& filename, DArrayAuto<U8>& data) override;
  42. void drawImage(UiImagePtr image,
  43. const Rect& uvs,
  44. const Rect& drawingRect,
  45. const UVec2& canvasSize) override;
  46. void drawLines(const SArray<UVec2>& positions,
  47. const Color& color,
  48. const UVec2& canvasSize) override;
  49. void beginRendering(CommandBufferPtr cmdb);
  50. void endRendering();
  51. private:
  52. const U MAX_VERTS = 128;
  53. WeakPtr<GrManager> m_gr;
  54. WeakPtr<ResourceManager> m_rc;
  55. enum StageId
  56. {
  57. LINES,
  58. TEXTURED_TRIANGLES,
  59. COUNT
  60. };
  61. class Stage
  62. {
  63. public:
  64. ShaderResourcePtr m_vShader;
  65. ShaderResourcePtr m_fShader;
  66. PipelinePtr m_ppline;
  67. Array<BufferPtr, MAX_FRAMES_IN_FLIGHT> m_vertBuffs;
  68. Array<ResourceGroupPtr, MAX_FRAMES_IN_FLIGHT> m_rcGroups;
  69. };
  70. Array<Stage, StageId::COUNT> m_stages;
  71. class ResourceGroupKey
  72. {
  73. public:
  74. StageId m_stage;
  75. U64 m_textureId;
  76. };
  77. // Intermediate
  78. U8 m_timestamp = 0; ///< Local timestamp.
  79. CommandBufferPtr m_cmdb;
  80. Array<WeakPtr<Vertex>, StageId::COUNT> m_vertMappings;
  81. Array<U32, StageId::COUNT> m_vertCounts;
  82. };
  83. /// @}
  84. } // end namespace anki