58 lines
781 B
C++
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}
|
|
{}
|
|
|
|
}
|