MainRenderer.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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/Renderer/Common.h>
  7. #include <AnKi/Resource/Forward.h>
  8. #include <AnKi/Renderer/Renderer.h>
  9. namespace anki
  10. {
  11. // Forward
  12. class ResourceManager;
  13. class ConfigSet;
  14. class StagingGpuMemoryManager;
  15. class UiManager;
  16. /// @addtogroup renderer
  17. /// @{
  18. /// MainRenderer statistics.
  19. class MainRendererStats
  20. {
  21. public:
  22. Second m_renderingCpuTime ANKI_DEBUG_CODE(= -1.0);
  23. Second m_renderingGpuTime ANKI_DEBUG_CODE(= -1.0);
  24. Second m_renderingGpuSubmitTimestamp ANKI_DEBUG_CODE(= -1.0);
  25. };
  26. /// Main onscreen renderer
  27. class MainRenderer
  28. {
  29. public:
  30. MainRenderer();
  31. ~MainRenderer();
  32. ANKI_USE_RESULT Error init(ThreadHive* hive, ResourceManager* resources, GrManager* gl,
  33. StagingGpuMemoryManager* stagingMem, UiManager* ui, AllocAlignedCallback allocCb,
  34. void* allocCbUserData, const ConfigSet& config, Timestamp* globTimestamp);
  35. ANKI_USE_RESULT Error render(RenderQueue& rqueue, TexturePtr presentTex);
  36. Dbg& getDbg();
  37. F32 getAspectRatio() const;
  38. const Renderer& getOffscreenRenderer() const
  39. {
  40. return *m_r;
  41. }
  42. Renderer& getOffscreenRenderer()
  43. {
  44. return *m_r;
  45. }
  46. void setStatsEnabled(Bool enabled)
  47. {
  48. m_statsEnabled = enabled;
  49. }
  50. const MainRendererStats& getStats() const
  51. {
  52. return m_stats;
  53. }
  54. private:
  55. HeapAllocator<U8> m_alloc;
  56. StackAllocator<U8> m_frameAlloc;
  57. UniquePtr<Renderer> m_r;
  58. Bool m_rDrawToDefaultFb = false;
  59. ShaderProgramResourcePtr m_blitProg;
  60. ShaderProgramPtr m_blitGrProg;
  61. U32 m_width = 0; ///< Default FB size.
  62. U32 m_height = 0; ///< Default FB size.
  63. F32 m_renderingQuality = 1.0;
  64. RenderGraphPtr m_rgraph;
  65. RenderTargetDescription m_tmpRtDesc;
  66. MainRendererStats m_stats;
  67. Bool m_statsEnabled = false;
  68. class
  69. {
  70. public:
  71. const RenderingContext* m_ctx = nullptr;
  72. Atomic<U32> m_secondaryTaskId = {0};
  73. } m_runCtx;
  74. void runBlit(RenderPassWorkContext& rgraphCtx);
  75. void present(RenderPassWorkContext& rgraphCtx);
  76. };
  77. /// @}
  78. } // end namespace anki