Mesh.cpp 1.1 KB

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