MainRenderer.h 2.0 KB

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