pine_renderer.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #pragma once
  2. #include "../../game/map/terrain.h"
  3. #include "../i_render_pass.h"
  4. #include "pine_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 PineRenderer : public IRenderPass {
  13. public:
  14. PineRenderer();
  15. ~PineRenderer() override;
  16. void configure(const Game::Map::TerrainHeightMap &height_map,
  17. const Game::Map::BiomeSettings &biome_settings);
  18. void submit(Renderer &renderer, ResourceManager *resources) override;
  19. void clear();
  20. [[nodiscard]] bool is_gpu_ready() const {
  21. if (m_pineInstances.empty()) {
  22. return true;
  23. }
  24. if (!m_visibilityDirty && m_visibleInstances.empty()) {
  25. return true;
  26. }
  27. return (m_pineInstanceBuffer != nullptr) && !m_visibilityDirty;
  28. }
  29. private:
  30. void generate_pine_instances();
  31. int m_width = 0;
  32. int m_height = 0;
  33. float m_tile_size = 1.0F;
  34. std::vector<float> m_heightData;
  35. std::vector<Game::Map::TerrainType> m_terrain_types;
  36. Game::Map::BiomeSettings m_biome_settings;
  37. std::uint32_t m_noiseSeed = 0U;
  38. std::vector<PineInstanceGpu> m_pineInstances;
  39. std::unique_ptr<Buffer> m_pineInstanceBuffer;
  40. std::size_t m_pineInstanceCount = 0;
  41. PineBatchParams m_pineParams;
  42. bool m_pineInstancesDirty = false;
  43. std::vector<PineInstanceGpu> m_visibleInstances;
  44. std::uint64_t m_cachedVisibilityVersion = 0;
  45. bool m_visibilityDirty = true;
  46. };
  47. } // namespace Render::GL