Mesh.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include "client/rendering/Mesh.h"
  2. Mesh::Mesh() : vba(0), vbo(0)
  3. {
  4. glGenVertexArrays(1, &vba);
  5. glBindVertexArray(vba);
  6. glGenBuffers(1, &vbo);
  7. glBindBuffer(GL_ARRAY_BUFFER, vbo);
  8. glVertexAttribPointer(0, 3, GL_FLOAT, false, sizeof(VertexData), static_cast<GLfloat*>(0));
  9. glEnableVertexAttribArray(0);
  10. glVertexAttribPointer(1, 2, GL_FLOAT, false, sizeof(VertexData), static_cast<GLfloat*>(0) + 3);
  11. glEnableVertexAttribArray(1);
  12. glVertexAttribPointer(2, 3, GL_FLOAT, false, sizeof(VertexData), static_cast<GLfloat*>(0) + 5);
  13. glEnableVertexAttribArray(2);
  14. }
  15. Mesh::~Mesh()
  16. {
  17. glDeleteVertexArrays(1, &vba);
  18. glDeleteBuffers(1, &vbo);
  19. }
  20. void Mesh::add(const VertexData& data)
  21. {
  22. buffer.push_back(data);
  23. }
  24. void Mesh::clear()
  25. {
  26. buffer.clear();
  27. }
  28. void Mesh::build() const
  29. {
  30. glBindBuffer(GL_ARRAY_BUFFER, vbo);
  31. glBufferData(GL_ARRAY_BUFFER, sizeof(VertexData) * buffer.size(), buffer.data(), GL_STATIC_DRAW);
  32. }
  33. void Mesh::draw() const
  34. {
  35. glBindVertexArray(vba);
  36. glDrawArrays(GL_TRIANGLES, 0, buffer.size());
  37. }