Files
WV-Core/src/rendering/VertexBuffer.cpp
T

69 lines
2.5 KiB
C++

#include <wv/rendering/VertexBuffer.h>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
namespace WillowVox
{
VertexBuffer::VertexBuffer()
{
glGenBuffers(1, &m_vbo);
}
VertexBuffer::VertexBuffer(VertexBuffer&& other) noexcept
: m_vbo(other.m_vbo)
{
other.m_vbo = 0;
}
VertexBuffer::~VertexBuffer()
{
glDeleteBuffers(1, &m_vbo);
}
void VertexBuffer::Bind()
{
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
}
void VertexBuffer::BufferData(std::size_t size, void* data)
{
Bind();
glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);
}
void VertexBuffer::SetAttribPointer(uint32_t index, std::size_t attribSize, VertexBufferAttribType attribType, bool normalized, std::size_t vertexSize, std::size_t offset)
{
Bind();
switch (attribType)
{
case VertexBufferAttribType::FLOAT64:
glVertexAttribPointer(index, attribSize, GL_DOUBLE, normalized, vertexSize, (void*)offset);
break;
case VertexBufferAttribType::FLOAT32:
glVertexAttribPointer(index, attribSize, GL_FLOAT, normalized, vertexSize, (void*)offset);
break;
case VertexBufferAttribType::FLOAT16:
glVertexAttribPointer(index, attribSize, GL_HALF_FLOAT, normalized, vertexSize, (void*)offset);
break;
case VertexBufferAttribType::INT32:
glVertexAttribIPointer(index, attribSize, GL_INT, vertexSize, (void*)offset);
break;
case VertexBufferAttribType::UINT32:
glVertexAttribIPointer(index, attribSize, GL_UNSIGNED_INT, vertexSize, (void*)offset);
break;
case VertexBufferAttribType::INT16:
glVertexAttribIPointer(index, attribSize, GL_SHORT, vertexSize, (void*)offset);
break;
case VertexBufferAttribType::UINT16:
glVertexAttribIPointer(index, attribSize, GL_UNSIGNED_SHORT, vertexSize, (void*)offset);
break;
case VertexBufferAttribType::INT8:
glVertexAttribIPointer(index, attribSize, GL_BYTE, vertexSize, (void*)offset);
break;
case VertexBufferAttribType::UINT8:
glVertexAttribIPointer(index, attribSize, GL_UNSIGNED_BYTE, vertexSize, (void*)offset);
break;
}
glEnableVertexAttribArray(index);
}
}