|
@@ -0,0 +1,60 @@
|
|
|
+#include "wrapper/VertexBuffer.h"
|
|
|
+
|
|
|
+VertexBuffer::VertexBuffer() : vertexArray(0), vertexBuffer(0) {
|
|
|
+ glGenVertexArrays(1, &vertexArray);
|
|
|
+ glGenBuffers(1, &vertexBuffer);
|
|
|
+}
|
|
|
+
|
|
|
+VertexBuffer::~VertexBuffer() {
|
|
|
+ glDeleteBuffers(1, &vertexBuffer);
|
|
|
+ glDeleteVertexArrays(1, &vertexArray);
|
|
|
+}
|
|
|
+
|
|
|
+void VertexBuffer::bindArray() const {
|
|
|
+ glBindVertexArray(vertexArray);
|
|
|
+}
|
|
|
+
|
|
|
+void VertexBuffer::bindBuffer() const {
|
|
|
+ glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
|
|
|
+}
|
|
|
+
|
|
|
+void VertexBuffer::setAttributes(const Attributes& attributes) {
|
|
|
+ bindArray();
|
|
|
+ bindBuffer();
|
|
|
+ attributes.set();
|
|
|
+}
|
|
|
+
|
|
|
+void VertexBuffer::setData(int size, const void* data, int flag) {
|
|
|
+ bindBuffer();
|
|
|
+ glBufferData(GL_ARRAY_BUFFER, size, data, flag);
|
|
|
+}
|
|
|
+
|
|
|
+void VertexBuffer::setStaticData(int size, const void* data) {
|
|
|
+ setData(size, data, GL_STATIC_DRAW);
|
|
|
+}
|
|
|
+
|
|
|
+void VertexBuffer::setStreamData(int size, const void* data) {
|
|
|
+ setData(size, data, GL_STREAM_DRAW);
|
|
|
+}
|
|
|
+
|
|
|
+void VertexBuffer::setDynamicData(int size, const void* data) {
|
|
|
+ setData(size, data, GL_DYNAMIC_DRAW);
|
|
|
+}
|
|
|
+
|
|
|
+void VertexBuffer::updateData(int offset, int size, const void* data) {
|
|
|
+ bindBuffer();
|
|
|
+ glBufferSubData(GL_ARRAY_BUFFER, offset, size, data);
|
|
|
+}
|
|
|
+
|
|
|
+void VertexBuffer::draw(int vertices, int mode, int offset) {
|
|
|
+ bindArray();
|
|
|
+ glDrawArrays(mode, offset, vertices);
|
|
|
+}
|
|
|
+
|
|
|
+void VertexBuffer::draw(int vertices, int offset) {
|
|
|
+ draw(vertices, GL_TRIANGLES, offset);
|
|
|
+}
|
|
|
+
|
|
|
+void VertexBuffer::drawStrip(int vertices, int offset) {
|
|
|
+ draw(vertices, GL_TRIANGLE_STRIP, offset);
|
|
|
+}
|