VertexArray.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 * 8 * 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
  29. glEnableVertexAttribArray(0);
  30. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), 0);
  31. // Normal is 3 floats
  32. glEnableVertexAttribArray(1);
  33. glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float),
  34. reinterpret_cast<void*>(sizeof(float) * 3));
  35. // Texture coordinates is 2 floats
  36. glEnableVertexAttribArray(2);
  37. glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float),
  38. reinterpret_cast<void*>(sizeof(float) * 6));
  39. }
  40. VertexArray::~VertexArray()
  41. {
  42. glDeleteBuffers(1, &mVertexBuffer);
  43. glDeleteBuffers(1, &mIndexBuffer);
  44. glDeleteVertexArrays(1, &mVertexArray);
  45. }
  46. void VertexArray::SetActive()
  47. {
  48. glBindVertexArray(mVertexArray);
  49. }