mirror of
https://github.com/ApfelTeeSaft/WV-Core.git
synced 2026-08-26 19:43:26 +00:00
69 lines
2.5 KiB
C++
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);
|
|
}
|
|
} |