GrManagerImpl.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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/Gr/GrManager.h>
  7. #include <AnKi/Gr/gl/Common.h>
  8. namespace anki {
  9. // Forward
  10. class RenderingThread;
  11. class WindowingBackend;
  12. class GlState;
  13. /// @addtogroup opengl
  14. /// @{
  15. /// Graphics manager backend specific.
  16. class GrManagerImpl final : public GrManager
  17. {
  18. public:
  19. /// Dummy framebuffer texture that emulates functionality vulkan can but GL can't
  20. TexturePtr m_fakeFbTex;
  21. FramebufferPtr m_fakeDefaultFb;
  22. GrManagerImpl();
  23. ~GrManagerImpl();
  24. ANKI_USE_RESULT Error init(GrManagerInitInfo& init, GrAllocator<U8> alloc);
  25. const RenderingThread& getRenderingThread() const
  26. {
  27. ANKI_ASSERT(m_thread);
  28. return *m_thread;
  29. }
  30. RenderingThread& getRenderingThread()
  31. {
  32. ANKI_ASSERT(m_thread);
  33. return *m_thread;
  34. }
  35. GlState& getState()
  36. {
  37. ANKI_ASSERT(m_state);
  38. return *m_state;
  39. }
  40. const GlState& getState() const
  41. {
  42. ANKI_ASSERT(m_state);
  43. return *m_state;
  44. }
  45. void swapBuffers();
  46. void pinContextToCurrentThread(Bool pin);
  47. Bool debugMarkersEnabled() const
  48. {
  49. return m_debugMarkers;
  50. }
  51. private:
  52. GlState* m_state = nullptr;
  53. RenderingThread* m_thread = nullptr;
  54. WindowingBackend* m_backend = nullptr; ///< The backend of the backend.
  55. Bool m_debugMarkers = false;
  56. ANKI_USE_RESULT Error createBackend(GrManagerInitInfo& init);
  57. void destroyBackend();
  58. void initFakeDefaultFb(GrManagerInitInfo& init);
  59. };
  60. /// @}
  61. } // end namespace anki