fog_renderer.h 999 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #pragma once
  2. #include "../draw_queue.h"
  3. #include "../i_render_pass.h"
  4. #include <QMatrix4x4>
  5. #include <QVector3D>
  6. #include <cstdint>
  7. #include <memory>
  8. #include <vector>
  9. namespace Render::GL {
  10. class Renderer;
  11. class ResourceManager;
  12. class FogRenderer : public IRenderPass {
  13. public:
  14. FogRenderer() = default;
  15. ~FogRenderer() override = default;
  16. void setEnabled(bool enabled) { m_enabled = enabled; }
  17. [[nodiscard]] auto is_enabled() const -> bool { return m_enabled; }
  18. void update_mask(int width, int height, float tile_size,
  19. const std::vector<std::uint8_t> &cells);
  20. void submit(Renderer &renderer, ResourceManager *resources) override;
  21. private:
  22. void build_chunks();
  23. using FogInstance = FogInstanceData;
  24. bool m_enabled = true;
  25. int m_width = 0;
  26. int m_height = 0;
  27. float m_tile_size = 1.0F;
  28. float m_half_width = 0.0F;
  29. float m_half_height = 0.0F;
  30. std::vector<std::uint8_t> m_cells;
  31. std::vector<FogInstance> m_instances;
  32. };
  33. } // namespace Render::GL