psemek/libs/gfx/source/buffer.cpp

58 lines
781 B
C++

#include <psemek/gfx/buffer.hpp>
namespace psemek::gfx
{
buffer::buffer()
{
gl::GenBuffers(1, &id_);
}
buffer::buffer(buffer && other)
: id_{other.id_}
{
other.id_ = 0;
}
buffer & buffer::operator = (buffer && other)
{
if (this == &other) return *this;
reset();
std::swap(id_, other.id_);
return *this;
}
buffer::~buffer()
{
reset();
}
buffer buffer::null()
{
return buffer(nullptr);
}
void buffer::bind() const
{
gl::BindBuffer(gl::ARRAY_BUFFER, id_);
}
void buffer::reset()
{
if (id_ != 0)
gl::DeleteBuffers(1, &id_);
id_ = 0;
}
void buffer::load(void const * data, std::size_t size, GLenum usage)
{
bind();
gl::BufferData(gl::ARRAY_BUFFER, size, data, usage);
}
buffer::buffer(std::nullptr_t)
: id_{0}
{}
}