firecamp_renderer.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #pragma once
  2. #include "../../game/map/terrain.h"
  3. #include "../i_render_pass.h"
  4. #include "firecamp_gpu.h"
  5. #include <QVector3D>
  6. #include <cstdint>
  7. #include <memory>
  8. #include <vector>
  9. namespace Render::GL {
  10. class Buffer;
  11. class Renderer;
  12. class FireCampRenderer : public IRenderPass {
  13. public:
  14. FireCampRenderer();
  15. ~FireCampRenderer() override;
  16. void configure(const Game::Map::TerrainHeightMap &height_map,
  17. const Game::Map::BiomeSettings &biome_settings);
  18. void setExplicitFireCamps(const std::vector<QVector3D> &positions,
  19. const std::vector<float> &intensities = {},
  20. const std::vector<float> &radii = {});
  21. void submit(Renderer &renderer, ResourceManager *resources) override;
  22. void clear();
  23. private:
  24. void generateFireCampInstances();
  25. void addExplicitFireCamps();
  26. int m_width = 0;
  27. int m_height = 0;
  28. float m_tile_size = 1.0F;
  29. std::vector<float> m_heightData;
  30. std::vector<Game::Map::TerrainType> m_terrain_types;
  31. Game::Map::BiomeSettings m_biome_settings;
  32. std::uint32_t m_noiseSeed = 0U;
  33. std::vector<FireCampInstanceGpu> m_fireCampInstances;
  34. std::unique_ptr<Buffer> m_fireCampInstanceBuffer;
  35. std::size_t m_fireCampInstanceCount = 0;
  36. FireCampBatchParams m_fireCampParams;
  37. bool m_fireCampInstancesDirty = false;
  38. std::vector<FireCampInstanceGpu> m_visibleInstances;
  39. std::uint64_t m_cachedVisibilityVersion = 0;
  40. bool m_visibilityDirty = true;
  41. std::vector<QVector3D> m_explicitPositions;
  42. std::vector<float> m_explicitIntensities;
  43. std::vector<float> m_explicitRadii;
  44. };
  45. } // namespace Render::GL