VertexBuffer.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #ifndef VERTEXBUFFER_H
  2. #define VERTEXBUFFER_H
  3. #include "data/ArrayList.h"
  4. #include "rendering/GL.h"
  5. class VertexBuffer final {
  6. GL::VertexArray vertexArray;
  7. GL::Buffer vertexBuffer;
  8. int size;
  9. public:
  10. class Attributes final {
  11. ArrayList<GL::Attribute, 10> attributes;
  12. friend class VertexBuffer;
  13. public:
  14. Attributes& addFloat(int count);
  15. Attributes& addColor4();
  16. Attributes& addSpacer();
  17. private:
  18. void set() const;
  19. };
  20. VertexBuffer();
  21. ~VertexBuffer();
  22. VertexBuffer(const VertexBuffer& other) = delete;
  23. VertexBuffer(VertexBuffer&& other) = delete;
  24. VertexBuffer& operator=(const VertexBuffer& other) = delete;
  25. VertexBuffer& operator=(VertexBuffer&& other) = delete;
  26. void init(const Attributes& attributes);
  27. void setStaticData(int size, const void* data = nullptr);
  28. void setStreamData(int size, const void* data = nullptr);
  29. void setDynamicData(int size, const void* data = nullptr);
  30. void updateData(int offset, int size, const void* data);
  31. void draw(int vertices, int offset = 0);
  32. void drawStrip(int vertices, int offset = 0);
  33. void drawPoints(int vertices, int offset = 0);
  34. int getSize() const;
  35. private:
  36. void bindArray() const;
  37. void bindBuffer() const;
  38. };
  39. #endif