#include "client/rendering/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::setFloatAttribute(int index, int length, int offset, int step) {
    glVertexAttribPointer(index, length, GL_FLOAT, false, sizeof (float) * step, static_cast<float*> (0) + offset);
    glEnableVertexAttribArray(index);
}

void VertexBuffer::setData(int size, const void* data) {
    glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);
}

void VertexBuffer::bindArray() const {
    glBindVertexArray(vertexArray);
}

void VertexBuffer::bindBuffer() const {
    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
}

void VertexBuffer::bind() const {
    bindArray();
    bindBuffer();
}

void VertexBuffer::draw(int vertices) const {
    glDrawArrays(GL_TRIANGLES, 0, vertices);
}

void VertexBuffer::drawLines(int vertices) const {
    glDrawArrays(GL_LINES, 0, vertices);
}