Drawer.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright (C) 2009-2022, 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/RenderingKey.h>
  8. #include <AnKi/Gr.h>
  9. namespace anki {
  10. // Forward
  11. class Renderer;
  12. /// @addtogroup renderer
  13. /// @{
  14. /// @memberof RenderableDrawer.
  15. class RenderableDrawerArguments
  16. {
  17. public:
  18. // The matrices are whatever the drawing needs. Sometimes they contain jittering and sometimes they don't.
  19. Mat3x4 m_viewMatrix;
  20. Mat3x4 m_cameraTransform;
  21. Mat4 m_viewProjectionMatrix;
  22. Mat4 m_previousViewProjectionMatrix;
  23. SamplerPtr m_sampler;
  24. U32 m_minLod = 0;
  25. U32 m_maxLod = MAX_LOD_COUNT - 1;
  26. };
  27. /// It uses the render queue to batch and render.
  28. class RenderableDrawer
  29. {
  30. friend class RenderTask;
  31. public:
  32. RenderableDrawer(Renderer* r)
  33. : m_r(r)
  34. {
  35. }
  36. ~RenderableDrawer();
  37. void drawRange(RenderingTechnique technique, const RenderableDrawerArguments& args,
  38. const RenderableQueueElement* begin, const RenderableQueueElement* end, CommandBufferPtr& cmdb);
  39. private:
  40. class Context;
  41. Renderer* m_r;
  42. void flushDrawcall(Context& ctx);
  43. void drawSingle(Context& ctx);
  44. };
  45. /// @}
  46. } // end namespace anki