VertexArray.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // ----------------------------------------------------------------
  2. // From Game Programming in C++ by Sanjay Madhav
  3. // Copyright (C) 2017 Sanjay Madhav. All rights reserved.
  4. //
  5. // Released under the BSD License
  6. // See LICENSE in root directory for full details.
  7. // ----------------------------------------------------------------
  8. #include "VertexArray.h"
  9. #include <GL/glew.h>
  10. VertexArray::VertexArray(const float* verts, unsigned int numVerts,
  11. const unsigned int* indices, unsigned int numIndices)
  12. :mNumVerts(numVerts)
  13. ,mNumIndices(numIndices)
  14. {
  15. // Create vertex array
  16. glGenVertexArrays(1, &mVertexArray);
  17. glBindVertexArray(mVertexArray);
  18. // Create vertex buffer
  19. glGenBuffers(1, &mVertexBuffer);
  20. glBindBuffer(GL_ARRAY_BUFFER, mVertexBuffer);
  21. glBufferData(GL_ARRAY_BUFFER, numVerts * 5 * sizeof(float), verts, GL_STATIC_DRAW);
  22. // Create index buffer
  23. glGenBuffers(1, &mIndexBuffer);
  24. glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
  25. glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices * sizeof(unsigned int), indices, GL_STATIC_DRAW);
  26. // Specify the vertex attributes
  27. // (For now, assume one vertex format)
  28. // Position is 3 floats starting at offset 0
  29. glEnableVertexAttribArray(0);
  30. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 5, 0);
  31. glEnableVertexAttribArray(1);
  32. glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5,
  33. reinterpret_cast<void*>(sizeof(float) * 3));
  34. }
  35. VertexArray::~VertexArray()
  36. {
  37. glDeleteBuffers(1, &mVertexBuffer);
  38. glDeleteBuffers(1, &mIndexBuffer);
  39. glDeleteVertexArrays(1, &mVertexArray);
  40. }
  41. void VertexArray::SetActive()
  42. {
  43. glBindVertexArray(mVertexArray);
  44. }