buffer.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #pragma once
  2. #include <QOpenGLFunctions_3_3_Core>
  3. #include <vector>
  4. namespace Render::GL {
  5. class Buffer : protected QOpenGLFunctions_3_3_Core {
  6. public:
  7. enum class Type { Vertex, Index, Uniform };
  8. enum class Usage { Static, Dynamic, Stream };
  9. Buffer(Type type);
  10. ~Buffer() override;
  11. void bind();
  12. void unbind();
  13. void set_data(const void *data, size_t size, Usage usage = Usage::Static);
  14. template <typename T>
  15. void set_data(const std::vector<T> &data, Usage usage = Usage::Static) {
  16. set_data(data.data(), data.size() * sizeof(T), usage);
  17. }
  18. private:
  19. GLuint m_buffer = 0;
  20. Type m_type;
  21. [[nodiscard]] auto get_gl_type() const -> GLenum;
  22. [[nodiscard]] static auto get_gl_usage(Usage usage) -> GLenum;
  23. };
  24. class VertexArray : protected QOpenGLFunctions_3_3_Core {
  25. public:
  26. VertexArray();
  27. ~VertexArray() override;
  28. void bind();
  29. void unbind();
  30. void add_vertexBuffer(Buffer &buffer, const std::vector<int> &layout);
  31. void set_index_buffer(Buffer &buffer);
  32. [[nodiscard]] auto id() const -> GLuint { return m_vao; }
  33. private:
  34. GLuint m_vao = 0;
  35. int m_currentAttribIndex = 0;
  36. };
  37. } // namespace Render::GL