primitive_batch.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "primitive_batch.h"
  2. namespace Render::GL {
  3. static PrimitiveBatchStats s_batchStats;
  4. PrimitiveBatcher::PrimitiveBatcher() {
  5. m_spheres.reserve(1024);
  6. m_cylinders.reserve(2048);
  7. m_cones.reserve(512);
  8. }
  9. PrimitiveBatcher::~PrimitiveBatcher() = default;
  10. void PrimitiveBatcher::add_sphere(const QMatrix4x4 &transform,
  11. const QVector3D &color, float alpha) {
  12. PrimitiveInstanceGpu inst;
  13. inst.set_transform(transform);
  14. inst.set_color(color, alpha);
  15. m_spheres.push_back(inst);
  16. ++s_batchStats.spheres_submitted;
  17. }
  18. void PrimitiveBatcher::add_cylinder(const QMatrix4x4 &transform,
  19. const QVector3D &color, float alpha) {
  20. PrimitiveInstanceGpu inst;
  21. inst.set_transform(transform);
  22. inst.set_color(color, alpha);
  23. m_cylinders.push_back(inst);
  24. ++s_batchStats.cylinders_submitted;
  25. }
  26. void PrimitiveBatcher::add_cone(const QMatrix4x4 &transform,
  27. const QVector3D &color, float alpha) {
  28. PrimitiveInstanceGpu inst;
  29. inst.set_transform(transform);
  30. inst.set_color(color, alpha);
  31. m_cones.push_back(inst);
  32. ++s_batchStats.cones_submitted;
  33. }
  34. void PrimitiveBatcher::clear() {
  35. m_spheres.clear();
  36. m_cylinders.clear();
  37. m_cones.clear();
  38. }
  39. void PrimitiveBatcher::reserve(std::size_t spheres, std::size_t cylinders,
  40. std::size_t cones) {
  41. m_spheres.reserve(spheres);
  42. m_cylinders.reserve(cylinders);
  43. m_cones.reserve(cones);
  44. }
  45. auto get_primitive_batch_stats() -> const PrimitiveBatchStats & {
  46. return s_batchStats;
  47. }
  48. void reset_primitive_batch_stats() { s_batchStats.reset(); }
  49. } // namespace Render::GL